通过课程设计,理解掌握语法制导翻译的原理与应用,理解中间代码,掌握把表达式翻译出中间代码的算法与思想,并设计出错处理方法。
玩具编译器,用于完成编译原理课设,实现了如下内容:
- 词法分析
- 语法分析
- 错误输出
- 逆波兰式生成
- 计算结果
- GUI 实现
输入按顺序经过了:
- 词法分析
- 语法分析
- 逆波兰式生成
- 计算并输出结果
一些特点:
- 将负号视为单目运算符处理,支持
-(2+3)
和(-2)
- 输入中的单目运算符负号
-
将以 @ 符号于逆波兰式中表现,以避免和双目运算符减号-
的歧义。 - 允许输入科学记数法如
1e3
1.9E2
等。小数可简写为.78
,等价于0.78
。 - 内部计算使用精确数 (BigDecimal) 运算而不是浮点数,避免出现浮点错误和 int 溢出。
- 运算精度为小数点后 64 位,显示输出精度为小数点后 15 位有效数字。
- GUI 美化
-
支持(彻底不打算支持,这个语法有点怪)-(9)
2+-(3+2)
这样的表达式 - 抛弃
1+-2
这样的,只支持1+(-2)
这样的 - 支持
-2+3
和(-2+3)
这样的 - 支持标准负号运算,每个表达式的最开头一个子表达式都允许携带负号,如
-1
-(2)
-(-2)
。这样的:3+ -2
3+ -(2)
不支持,因为那个负号不在第一个子表达式前面。