《编译原理实验资料》包含了编译器设计与实现过程中的关键实验内容和指导,旨在帮助学生深入理解词法分析、语法分析等核心概念,并通过实践操作提升问题解决能力。
一、上机实习目的
理解编译程序的构造原理,并掌握其设计方法与技术。通过本次实践操作加深对编译原理基础理论的理解的同时,提高学生的动手能力和软件设计能力。
二、上机实习要求
在充分理解编译原理基本思想的基础上,选择一种熟悉的编程语言来完成一个完整的编译器的设计和实现过程。本实习需要采用递归下降分析技术——这是一种自顶向下的方法,在此过程中为每个(或者若干个)语法成分编写处理子程序,并从<程序>的处理开始,通过调用一系列函数或过程进行源代码的语法与语义解析直至完成整个程序的编译。本次实习的目标是设计并实现一个针对C语言小子集的编译器,包含词法分析、语法分析和语义分析等功能,并生成目标代码(汇编语言)或者中间代码(四元式)。
三、上机实习步骤
1. 阅读《上机实习指导书》。
2. 根据设计要求编写算法并绘制程序流程图。
3. 按照流程图编写实际的编译器程序。
4. 将编写的代码输入计算机进行调试和测试。
5. 编写一份详细的实验报告。
四、上机实习内容
1. 题目:C语言小子集编译程序实现
2. C语言小子集文法规则如下:
<程序>::=main(){<分程序>}
<分程序>::=<变量说明部分>;<语句部分>
<变量说明部分>::=<变量说明><标识符表>
<变量说明>::=int
<标识符表>::=<标识符表>,<标识符>|空值
<标识符>: = <字母>{<字母>|数字}
<语句部分>::=<语句部分>; <语句>|空值
<语句>::=赋值语句|条件语句|循环语句
赋值语句::= <标识符>=表达式
条件::<表达式><关系运算符><表达式>
<表达式>::=<项>|<表达式>+|-<项>
<项>: = <因子>|<项>*|/<因子>
<因子>:=<标识符>|常量|(表达式)
常量::=无符号整数
无符号整数::<数字序列>
数字序列::<数字序列><数字>|空值
加法运算符:=+|-
乘法运算符::*|/
关系运算符: < | > | != | >= | <= | ==
复合语句::<{<语句部分>}>
条件语句::=if(<条件>)<语句1>else<语句1>
循环语句::=while(<条件>)do<语句1>
字母:=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r |s |t |u |v |w|x |y |z
数字::=0,1,2,3,4,5,6,7 ,8 ,9