问候,
欢迎再次回来。 文章的一部分对关于
解释并废弃附件中上载的一些代码。
口译员再次口译班将辛勤工作委托给备忘录班。 它有一个备忘录
以其成员之一的身份委托给:
protected Memo memo= new Memo();
public Memo memo() { return memo; }
口译员主要分为三个部分:
1)进行所有计算的Stack对象;
2)负责所有局部变量的Scope对象;
3)记录以前的用户函数调用的Memo对象。
解释器本身并没有做太多事情,即它仅调用execute方法
在代码列表中的所有说明上。 指令是接口
所有真正的指令都必须执行。
您可以从解释器的简单性得出结论:大多数(如果不是全部)
“智能”在指令实现中实现。 口译员
仅提供技术来运行已编译的程序。
该指令与“真实”机器代码指令非常不同。 我们的
指令类实现了更高级别的功能。 下一部分
本文的内容显示了最重要的说明及其机制
实施以及如何向集中添加更多指令。 主要是指示
实现一个函数,一个列表函数或一个带引号的对象。
结束语本文的一部分包含一个附件:一个包含所有源代码的zip文件
到目前为止。 此代码“按原样”提供,对此我不承担任何责任。 但这是完全没有害处的:编译器中有一个Main类
可以用来玩整个游戏的程序包。
这是当您以错误的方式调用它时的内容:
usage: java compiler.Main <infile> [-i ] [-o <outfile>] [-d] [-m] [-r | -t]
<infile> a file that contains the source
-i consider <infile> compiled code
-o <outfile> save compiled code to <outfile>
-d dump compiled to to System.out
-m turn on memoization (default is off)
-r run the compiled code
-t trace the compiled code
the content of the stack is displayed at the end
Main类只是所有这些的小驱动程序(包括源代码)。
仔细检查代码并尝试理解所有内容。 一个解释可以
可以在编译器文章中找到,但随时可以评论和/或提问。
主驱动程序始终从<infile>读取。 当您不提供-i时
标志,驱动程序假定它必须编译存储在该文件中的源代码。
如果确实提供-i标志,则驱动程序将假定该文件包含已编译
码。 如果提供-o <outfile>参数,驱动程序将保存已编译的
该文件的代码。 提供-r或-t标志时,驱动程序将启动
为您翻译并运行代码。 执行完成后,堆栈
将被打印。 在指定了-t标志的情况下运行代码时,每条指令
将在执行之前将其与当前堆栈值一起打印。
-m标志打开备忘录,-d标志将编译后的代码转储到
在执行开始之前(如果使用-r或
-t标志在命令行上传递)或在驱动程序终止之前传递。
试一下,例如对于初学者来说,将以下内容存储在文件中,然后
尝试编译并运行它:
1+2;
3+4;
5:6:+7+8;
下周在这篇正在进行的文章的续集中见,以及
亲切的问候,
乔斯
From: https://bytes.com/topic/java/insights/739700-compilers-6b-interpreters