CompilationPrincipleDesign
群: 123300273(大佬群 2TB学习资料)(获取sql文件,入费群5元)
QQ: 1095737364
Github 地址: https://github.com/SimpleGraduationProjects/CompilationPrincipleDesign
编译解释器
简介
本代码来源于网络,每份代码收服务整理费5元, 请入群(123300273)后联系群主索要免费讲解原理!
一、需求分析
以编译原理书中最后一项作业,根据前端生成的中间代码来编写后端解释器,其中间代码标示了每行的行号,同时还包含了赋值语句、跳转语句、二位运算表达式的四则运算,条件语句跳转,列表类型的值获取等等,对于这个简单的中间代码执行程序,可以很简单的根据每行定义一个槽列表,方便跳转语句。主要的值类型可分为整型,布尔类型,我使用Object类型的列表存入,用instance判断其类型,从而转换,语法分析器中读入词法列表,根据每个槽生成槽内的字节码列表,槽对应行号和字节码列表。
二、可行性分析
上文中我使用槽代表每行应该执行的语句,后面我定义了一部分字节码,整个流程是以编译成字节码后执行的,对于字节码和语句树的方式,前者更加方便操作(对于列表的前进后退等等),更能完好的控制流程跳转。 最后使用虚拟机的方式遍历执行字节码,虚拟机参考Python的执行方式,虚拟机内有两个值列表,一个存入当前作用域内执行的值,一个HashMap存入变量,对应执行列表中的某个位置。
三、总体设计
1. 首先主程序读入文件,转换成字符串。
2. 传入词法分析器,生成特定的词法列表。
3. 传入语法分析器,生成槽列表(字节码列表)。
4. 槽列表传入虚拟机,遍历执行。
5. 得到执行完成的两个列表,运行内列表和变量哈希列表,输出。
环境
-
IntelliJ IDEA 2009.3
-
Mysql 5.7.26
-
Tomcat 7.0.73
-
JDK 1.8