本研究探讨了编译器设计中关键环节之一——算术表达式的高效目标代码生成技术。通过优化算法和数据结构的应用,旨在提高程序执行效率与代码质量。
一、实验目的:实现一个中间代码生成程序,能够识别用户输入的关于标识符与整数的算术表达式(包括加法和乘法),并输出相应的汇编指令序列。
二、实验主要内容:
1. 本次实验使用的文法规则如下:
- S -> E
- E -> E + E
- E -> E * E
- E -> (E)
- E -> i
2. LR分析表:
|状态| ACTION | GOTO |
|---|--------|------|
|| | |+ ||* ||( ||) ||i ||
|--|-|----|
|0 | S2 |S3 |- |11 S4 |S5 |
|1 |-- |- |- |- |- |
|2 | S2 S3 ||6 ||
|-||r4|r4 r4 r4|
|3|--|--|--|--|-|
|4 | S2 |S3 |- |7 - |
|-||-||-||
|5 |-- |- |- |- |- |
|6 ||11 S4 S9 ||
|-||r1|r1 r1|
|7 |--|--|--|--|-|
|8 | r2 |r2 |- |r2 - |
|-||-||-||
|9 ||r3|r3 r3|
注:表中的“S”代表移进动作,“R”代表归约动作,数字表示状态转移或规则编号。
3. 实验要求:
输入包含加法和乘法的算术表达式(仅含标识符与整数),输出对应的汇编语言指令序列。
4. 限制条件:实验中只考虑使用一个寄存器的情况,并且不涉及跳转汇编指令和标号。