【小项目】Java实现带编译器和解释器的计算器
介绍
本项目通过Java写的语法树和虚拟机对variable实现简单的计算器操作,实现的功能如下图所示
编译器和解释器
计算机语言可以有两种执行方式:
- 先编译成机器码,再执行。
- 边解释边执行。
我们常见的C和C++是通过先编译再执行,而 python可以边解释边执行。Java语言比较特殊,会对热点代码进行编译,编译和解释混用。
编译器和解释器区别如下:
- 解释器可以运行同时翻译程序。编译器先扫描整个程序然后将程序翻译成机器码。
- 解释器可以用较少的时间分析程序,但是运行时间比编译器长。编译器需要较长的时间去分析程序,但是可以以较快的速度运行。
- 解释器不会生成临时的对象码,所以可以更好利用内存。编译器需要生成临时的文件去获取机器码关联,所以需要更多的内存。
语法树
要了解程序语言运行的先后顺序,语法树是必要的。比如当计算器遇到“+”时,就生成了以“+”为根结点的二叉树,左右节点分别是数字;又比如当计算器遇到“;”的时候,就生成了以“;”为根结点的语法树,左边为上一个表达式,右边为下一个表达式。
比如我们想计算如下算式:
1 |
|
我们得到了如下所示的语法树:
虚拟机
虚拟机通过读取语法树里的节点,进而对节点进行处理,从而输出结果,本项目中的虚拟机通过Map和Stack实现数字的加减乘除。
项目地址:点此进入
【小项目】Java实现带编译器和解释器的计算器
http://liuminxuan.github.io/2021/01/28/【小项目】Java实现编译器和解释器/