北 京 林 业 大 学
实 验 任 务 书
北 京 林 业 大 学 11学年—12学年第 2学期 编译原理实验任务书
专业名称: 计算机科学与技术 实验学时: 4 课程名称:编译原理 任课教师: 李冬梅
实验题目:语法分析
实验环境:Paser Generator ,Visual C++ 自选另外一种高级语言
实验目的:
通过设计编制调试具体的YACC程序和有关的语法分析程序,掌握YACC源程序的基本组成,掌握语法分析程序的设计思想,加深对语法分析程序的理解。
实验内容:
1.借助自动生成工具LEX和YACC完成以下实验内容
阅读并运行所给程序:词法.l、语法.y,以理解LEX和YACC的使用和二者之间的通信机制。(分别编译后生成:词法.c、语法.c,将两个文件在VC下创建到一个project下运行即可)
下面是程序运行后的输入和输出结果示例,其中输入“cat eat mouse”后,输出“Sentence is valid”,表示可以识别此类语句,而输入“I love you”后,输出“syntax error”,表示不可识别这类语句。
修改源程序(词法.l、语法.y),使得修改后的程序能够识别类似下列语法结构的语句:
I love you.
I like apples and pears.
I wish you success.
We study compiler hard.
We study compiler hard in school.
也可以自己定义更多符合英语语法规则的句子。
2.在实验1词法分析的基础上,编写程序完成以下其中一个题目
(1)构造下面算术表达式文法的递归下降语法分析程序
∷=[+|-] {(+|-) }
∷={(*|/) }
∷= id|num| ‘(‘‘)’
输入:一个算术表达式
输出:该算术表达式是否合法
(2) 构造文法的LL(1)分析表
输入:一个文法
输出:该文法的全部FIRST集、FOLLOW集和LL(1)分析表
(3) 构造文法的算符优先分析表
输入:一个文法
输出:文法的全部FIRSTVT集、LASTVT集和算符优先分析表
(4)构造文法的LR(0)分析表
输入:一个文法
输出:文法的LR(0)分析表
选做:
1.将上述任务2中的(2)或(3)或(4)的程序进一步完善实现一种语法分析器,即 输入:一个文法和一个句子
输出:该句子是否满足该文法
2.实现窗体版的输入输出界面
实验结果提交要求:
根据实验报告模板书写实验报告
● 对于手工编写的语法分析程序,在实验报告的“实现方法”中需要写出以下两部分
内容:
1. 所用数据结构的定义及其相关说明(相关结构体或类的定义及其含义)
2. 自定义函数的名称及其功能说明
● 对于用LEX和YACC实现的句子识别程序不需要书写“实现方法”中的内容,只需
给出“实验结果”和“结论分析”即可。
将以下文件压缩成一个.rar文件(文件名为学号+姓名),上传到:ftp://202.204.125.21/lidongmei/homework/下的相应班级中
● 实验报告(实验报告2.doc)
● 手工编写的语法分析程序(整个项目文件)
● 用LEX和YACC实现的句子识别程序(整个项目文件)
北 京 林 业 大 学
实 验 任 务 书
北 京 林 业 大 学 11学年—12学年第 2学期 编译原理实验任务书
专业名称: 计算机科学与技术 实验学时: 4 课程名称:编译原理 任课教师: 李冬梅
实验题目:语法分析
实验环境:Paser Generator ,Visual C++ 自选另外一种高级语言
实验目的:
通过设计编制调试具体的YACC程序和有关的语法分析程序,掌握YACC源程序的基本组成,掌握语法分析程序的设计思想,加深对语法分析程序的理解。
实验内容:
1.借助自动生成工具LEX和YACC完成以下实验内容
阅读并运行所给程序:词法.l、语法.y,以理解LEX和YACC的使用和二者之间的通信机制。(分别编译后生成:词法.c、语法.c,将两个文件在VC下创建到一个project下运行即可)
下面是程序运行后的输入和输出结果示例,其中输入“cat eat mouse”后,输出“Sentence is valid”,表示可以识别此类语句,而输入“I love you”后,输出“syntax error”,表示不可识别这类语句。
修改源程序(词法.l、语法.y),使得修改后的程序能够识别类似下列语法结构的语句:
I love you.
I like apples and pears.
I wish you success.
We study compiler hard.
We study compiler hard in school.
也可以自己定义更多符合英语语法规则的句子。
2.在实验1词法分析的基础上,编写程序完成以下其中一个题目
(1)构造下面算术表达式文法的递归下降语法分析程序
∷=[+|-] {(+|-) }
∷={(*|/) }
∷= id|num| ‘(‘‘)’
输入:一个算术表达式
输出:该算术表达式是否合法
(2) 构造文法的LL(1)分析表
输入:一个文法
输出:该文法的全部FIRST集、FOLLOW集和LL(1)分析表
(3) 构造文法的算符优先分析表
输入:一个文法
输出:文法的全部FIRSTVT集、LASTVT集和算符优先分析表
(4)构造文法的LR(0)分析表
输入:一个文法
输出:文法的LR(0)分析表
选做:
1.将上述任务2中的(2)或(3)或(4)的程序进一步完善实现一种语法分析器,即 输入:一个文法和一个句子
输出:该句子是否满足该文法
2.实现窗体版的输入输出界面
实验结果提交要求:
根据实验报告模板书写实验报告
● 对于手工编写的语法分析程序,在实验报告的“实现方法”中需要写出以下两部分
内容:
1. 所用数据结构的定义及其相关说明(相关结构体或类的定义及其含义)
2. 自定义函数的名称及其功能说明
● 对于用LEX和YACC实现的句子识别程序不需要书写“实现方法”中的内容,只需
给出“实验结果”和“结论分析”即可。
将以下文件压缩成一个.rar文件(文件名为学号+姓名),上传到:ftp://202.204.125.21/lidongmei/homework/下的相应班级中
● 实验报告(实验报告2.doc)
● 手工编写的语法分析程序(整个项目文件)
● 用LEX和YACC实现的句子识别程序(整个项目文件)