
interpreter
文章平均质量分 83
shilei-luc
服务器生态技术专家
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM interpreter的中止机制设计-如何在复杂路径中确保及时响应
/ 同步当前执行状态// 将线程状态改为挂起// 处理异常在函数中,检查当前线程是否需要挂起。通过sync_state同步执行状态,再将线程状态切换为挂起,同时检查是否存在异常需要处理。这个函数将在以下场景中被调用。原创 2024-11-04 20:52:59 · 915 阅读 · 0 评论 -
Interpreter数据类型处理的实现
整型(int:32 位的有符号整数。长整型(long:64 位的有符号整数。浮点型(float:32 位的 IEEE 754 单精度浮点数。双精度浮点型(double:64 位的 IEEE 754 双精度浮点数。引用类型(reference:对象或数组的引用。字节(byte)、字符(char)、短整型(short:在操作栈上以 32 位存储,但实际大小为 8 位、16 位。解释器需要根据数据类型的不同执行相应的操作,例如在栈中存储和操作整型和长整型时的差异。原创 2024-11-04 20:49:51 · 588 阅读 · 0 评论 -
Interpreter异常处理的实现
异常处理机制在 JVM 中扮演着至关重要的角色。Java 虚拟机通过异常机制来捕获和处理运行时的错误,并确保代码在异常发生后可以有条不紊地退出或恢复。对于 JVM 解释器而言,异常处理不仅涉及栈帧的回溯和恢复,还要确保栈帧的一致性和内存状态的正确性。本篇将深入探讨 JVM 解释器的异常处理机制,包括异常捕获流程、栈帧的回溯与恢复、异常处理器的查找等内容,并通过伪代码进行说明。原创 2024-11-04 20:48:46 · 811 阅读 · 0 评论 -
Interpreter stack frame栈帧管理的实现
在虚拟机实现中,栈帧管理是解释器设计的核心组件之一。栈帧是一个函数调用的上下文,用于存储局部变量、操作数栈、返回地址等数据。在 JVM 的解释器实现中,栈帧的管理尤为重要,不仅要处理函数调用的入栈和返回的出栈,还需要兼顾多线程环境中的内存分配与回收。JVM 解释器中的栈帧管理是一个复杂而关键的技术点。通过栈帧的结构设计和多线程环境下的管理,解释器实现了方法调用和返回的动态内存管理。本文讨论了栈帧的分配、回收、局部变量表和操作数栈的管理,并提出了一些性能优化的方向,如按需分配和栈帧缓存。原创 2024-11-04 20:47:43 · 645 阅读 · 0 评论 -
Interpreter bytecode 优化实现
在 JVM 解释器的设计中,字节码指令的执行效率直接影响到虚拟机的性能。解释器的主要任务是逐条解释并执行字节码指令,因此如何优化字节码的处理,减少每条指令的执行开销,是提升解释器性能的核心。本篇文章将探讨 JVM 解释器在字节码执行上的优化策略,包括指令缓存、分支预测、内存访问优化和字节码级别的微优化,以期实现更高效的字节码解释执行。原创 2024-11-04 20:46:55 · 752 阅读 · 0 评论 -
JVM中如何实现一个方法的调用
通过指令实现方法调用的过程涉及类加载、解析、vtable 的构建与填充等多个步骤。OpenJDK 的实现利用了 vtable 的动态查找机制,支持 Java 的多态性和动态绑定特性。理解这一过程对于深入学习 Java 的运行机制和优化代码性能至关重要。原创 2024-11-01 10:21:53 · 692 阅读 · 0 评论 -
如何写一个简单的解释器(Interpreter)
解释器是虚拟机VM的重要组成部分,解释器其实和编译器在很多时候都是相近的概念,特别上实现过程中的概念。最近看到了一个系列文章,目前有14章,讲了如何用Python语言实现一套完整的解释器,来解释执行一个非常古老的语言——Pascal语言的源代码。我看过以后觉得有点意义,循序渐进不疾不徐。但是原文写的有点繁琐了。于是我花了几晚时间翻译和简化一下。目前共13章,后面陆续跟进。...原创 2019-01-08 23:30:08 · 450 阅读 · 0 评论 -
如何写一个简单的解释器(Interpreter)-14
未完待续Table of ContentsScopes and scoped symboltables Procedure declarations with formalparameters Proceduresymbols Nestedscopes Scope tree: Chaining scoped symboltables Nested scopes and ...原创 2019-01-08 23:19:23 · 280 阅读 · 0 评论 -
如何写一个简单的解释器(Interpreter)-13
如果一件事值得做,那就值得做过头儿.语义分析简介看看下面这个例子,引入我们的定义:x := x + y;Paser是怎么知道x和y之前有没有声明过呢?并不能,所以我们需要语义分析这个过程,来回答好这个问题。所以基本上,语义分析就是这样一个工作,让我们检查一个程序是不是合理,根据语言的定义,它的意义是什么。什么样的程序是合理的?这涉及到语言的定义和语言的需求。比...原创 2019-01-08 23:17:37 · 404 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-12
“不怕慢,就怕停” -中国谚语.什么是过程声明procedure declaration? 过程声明是一个语言模块,定义了一个标识符(过程的名字)和对应的Pascal代码块。有点像C语言的函数。严格定义:Pascal过程没有返回值. Pascal过程可以嵌套 可以有形参这个是我们今天的测试Pascal程序:PROGRAM Part12;VAR a :...原创 2019-01-08 18:06:02 · 347 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-10
今天的目标是:搭建一个支持Pascal编程语言子集的全功能解释器。我们使用的Pascal的例子程序,可以被Free Pascal compiler,fpc.编译通过。当然,我们希望我们的解释器可以成功解释通过。例子程序代码如下:PROGRAM Part10;VAR number : INTEGER; a, b, c, x : INTEGER; y ...原创 2019-01-08 17:28:11 · 409 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-11
译者按:从这一章开始,我们要准备随时开车了。所以有些不便于翻译的专有名词。我就保留了。迄今为止,我们弄明白了:把句子分解成token。这个过程也叫词法分析,干这个事儿的模块叫做词法分析器。我们也从头写过了一个自己的词法分析器,没有借助正则表达式或者Lex之类的工具,就生生的写出来了。 在token流中,如何识别一个短语,或者说找到一个特定结构。这个过程叫解析或者句法分析。 用句法图来表...原创 2019-01-08 13:01:32 · 421 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-2
Burger和Starbird合著过一本书《高效思考的五个要点》,里面提到TonyPlog,他是个吹喇叭的艺术家,开办了一个喇叭培训班。他班上都是成熟的喇叭演奏手。当这些演奏手吹奏复杂的歌曲的时候,吹的很精彩,但是当Tony让他们吹奏简单的音节的时候,听起来就很不成熟,甚至幼稚。Tony结果喇叭也吹了一次,听起来依然很成熟。众人惊诧不已。Tony解释说,吹好复杂的曲子容易,吹好简单的音节却很难,...原创 2019-01-04 10:40:29 · 305 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-3
不管看多少游泳的书,跟多少游泳教练交谈,第一次游泳的时候总会沉下去。所以一定要多练习。前两章我们聊了怎么实现两个整数的加和减,比如 “7 + 3”和“12 - 9”。今天我们聊聊怎么实现任意多位数的加减,比如“7 - 3 + 2 -1”.基本上,下面的图就是这种表达式的语法图:什么是语法图呢?语法图(syntax diagram)是用图形表示的一种编程语言的语法规则。基...原创 2019-01-04 11:54:21 · 358 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-4
还记得Confucius说过什么吗?“我听说了,后来我忘记了”“我看到了,后来我记住了.”“我做过了,后来我理解了.”这一章我们讲讲多个乘数法的计算,注意除法是整数的除法,比如9除以4等于2。我还要使用一种新的表达方式,上下文无关的语法书(简称为语法书),或者叫BNF(BackusNaur样式),来表示一种编程语言的语句规则。多说一句,我用的是扩展的...原创 2019-01-04 17:11:06 · 329 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-5
当你想弄明白一个复杂的系统,比如说interpreter或者是编译器。一开始它看起来好像是一团杂乱无章的毛球,你需要把这个毛球的线都拆出来,重新组成一个光滑的毛球。这个过程可以是单线程的,也就是说每次你只拿一根线,去打一个结。有时候你会觉得你有很多东西不懂,但是不要管它,你就继续缠线就行了。有一天你会灵光一现,在坚持了很长时间之后,最终会突然理解整个系统。我能给你的建议就是你仔细看看前面几...原创 2019-01-04 22:56:22 · 241 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-6
今天将是不同寻常的一天。你可能会问为什么,因为我们要处理带括号的算数表达式了,比如 7 + 3 * (10 / (12 / (3 + 1) -1))。首先,我们修改一下我们的语法。用来支持括号里面的表达式。上一章我们有一个factor规则,用来处理表达式中的基本单位。在我们的例子里就是整数。今天,我们将要添加另一个基本的单位——括号表达式。这是修改过后的语法:expr和term的生...原创 2019-01-05 23:01:13 · 319 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-7
之前答应过你,今天我们主要讨论一下贯穿全系列的最核心的数据结构。系好安全带准备出发!到现在我们已经有了自己的解释器,只要表达式里面有加减乘除这种语言结构,它就能够解析成功。这种解释器叫此法导向解释器。它通常只扫描代码一遍,适用于简单的语言。如果想做到分析更复杂的Pascal语言的结构,我们需要构建IR,也就是中间表示。我们的解析器负责生成IR,我们的解释器负责解释IR。业界的经验告诉我们,...原创 2019-01-06 23:13:41 · 532 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-8
今天的主要话题是单目运算符。具体来说:扩充现有的语法,处理单目运算加和单目运算减。 增加一个新的UnaryOp AST节点类。 扩充现有的解析器,生成包含UnaryOp AST节点的树形结构。 扩充现有的解释器,增加一个visit_UnaryOp方法,来解析单目运算农夫。单目运算符就是只有有个操作数的操作码,优先级比+, -, *, /要高。可以简单理解为正负号就对了。...原创 2019-01-07 13:05:30 · 298 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-9
今天要如何解析和解释Pascal语言的定义、复合语句、赋值语句、变量。还要聊聊符号表以及存储和查找变量。BEGIN BEGIN number := 2; a := number; b := 10 * a + 10 * number / 4; c := a - - b END; x := 11;EN...原创 2019-01-07 22:47:32 · 382 阅读 · 1 评论 -
如何写一个简单的解释器(Interpreter)-1
原创声明:这一个系列是翻译自https://ruslanspivak.com。插图是原文中自带的,同时我删除了一些没必要的解释。“如果你不知道compiler是怎么工作的,那么你就不会清楚计算机是怎么工作的。如果你不是100%确定地知道‘你知道compiler是怎么工作的’,那么你肯定不知道compiler是怎么工作的。”— SteveYegge别着急,试着跟我读完整个教程,最终...原创 2019-01-03 23:23:20 · 1264 阅读 · 1 评论