编译器-6B:口译员

问候,

欢迎再次回来。 文章的一部分对关于

解释并废弃附件中上载的一些代码。

口译员再次

口译班将辛勤工作委托给备忘录班。 它有一个备忘录

以其成员之一的身份委托给:


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值