编译原理实验指导

上传人:壹****1 文档编号:474326080 上传时间:2022-10-08 格式:DOC 页数:19 大小:226.50KB
返回 下载 相关 举报
编译原理实验指导_第1页
第1页 / 共19页
编译原理实验指导_第2页
第2页 / 共19页
编译原理实验指导_第3页
第3页 / 共19页
编译原理实验指导_第4页
第4页 / 共19页
编译原理实验指导_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《编译原理实验指导》由会员分享,可在线阅读,更多相关《编译原理实验指导(19页珍藏版)》请在金锄头文库上搜索。

1、计算机图形学实验指导书课程名称 : 编译原理 英文名称 : Compiler Principle 课程性质 : 必修 / 限选 编写人 : 孔繁茹 卢云宏2010年9月1日计算机学院阅读说明未加标注的为必做实验标有的为选做实验实验要求 每个小组不超过 4 人,需要完成以下任务 必做实验:全部完成(70%)实验 1.1(20%)实验 1.2(10%)实验 1.3(20%)实验 1.4(10%) 选做实验:至少完成3个(30%) 实验报告(10%)实验成绩上限(120%)第 1 部分 单元实验实验 1.1 根据状态转换图手工构造词法分析程序一、实验目的1. 理解词法分析器的基本功能2. 理解词法规

2、则的描述方法3. 理解状态转换图及其实现4. 能够编写简单的词法分析器二、实验平台C/C+三、实验内容手工构造一个简单的词法分析程序, 能够识别标识符、整数、关键字、算符、界符。1. 画出识别所有单词的状态转换图。(若状态转换图过于复杂,可以只画出主要部分)2. 根据状态转换图手工构造词法分析程序。从以下方法中选一:词法分析器可以作为独立的一遍也可以作为一个子程序被语法分析器调用3. 实现状态转换图。从以下方法中选一: 直接转向法 表驱动法四、设计文档1. 画出状态转换图 若通过正规式或正规文法手工转换得到,需写明转换步骤若通过正规式或正规文法编程转换得到,需附源程序清单2. 分析直接转向法和

3、表驱动法的优缺点五、参考资料1. 程序设计语言编译原理国防 陈火旺 3.2 词法分析器的设计实验1.2用LEX自动构造词法分析程序一、实验目的1. 掌握词法分析程序的自动构造方法2. 掌握词法分析程序自动构造工具Lex的工作原理和使用方法3. 熟悉LEX源程序语法4. 学习使用自动构造软件 SLex二、实验平台Windows + Slex三、实验内容1. 实现以下步骤,掌握SLex的工作过程a)构造LEX源程序,例如命名为Test.Lexb)编译lex源程序,生成C语言词法分析程序lexyy.c在DOS命令提示符下执行编译Slex Test.Lex得到目标文件lexyy.cc)改写生成的C语言

4、代码lexyy.c,增加主函数(如果没有)main ( ) yylex(); d)编译lexyy.c,产生可执行程序lexyy.exee)运行生成的可执行文件lexyy Test2.pl0f)察看运行结果,并对结果进行分析2. 编写LEX源程序,使其自动生成的C程序能够实现以下功能(至少完成2个) 复制一个文件,将文件中每个非空的空白符号序列替换为单个空格 将输入文件中的所有小写字母转换成大写字母,将转换后的文件存入另一个文件 同时在屏幕上输出转换后的文件内容。 输入一个 C 源程序文件, 将其中的所有关键字(即保留字)均转换为大写字母, 将转 换后的文件存入另一个文件,同时在屏幕上输出转换的

5、关键字个数。 将输入文件中的标识符输出到屏幕上。 将输入文件中所有能被9 整除的整数输出到屏幕上。 为输入文件的每一行打印行行号。 统计输入文件中的字符个数、字母个数、各类单词个数、行数。 (字符包括空格、制表符,不包括换行符) 把一个文件改变为“Pig Latin”文.假设该文件是一个用空白符分隔开的单词(字母串)序列, 每当你遇到一个单词时:(1) 如果第一个字母是辅音字母, 则将它移到单词的结尾, 并加上 ay(2) 如果第一个字母是元音字母, 则只在单词的结尾加上 ay 所有非字母的字符不加处理直接复制到输出 3. 用 Lex 自动生成词法分析程序 词法分析的输出存入文件中,输出的单词

6、序列格式可以自己定义 4. 修正 Slex 的 bugSlex本身存在Bug,每次运行后不能正常退出。注意:因此前已有学生完成了 bug修正,所以只有提出不同的修正方案, 或者更好的修正方案,才可以得分。四、设计文档1. 分析Test.lex的功能2. 分析词法分析程序的自动生成原理3. 分析自动生成的词法分析程序的结构4. 若对Slex的bug进行了修正,详细写出修正方案。五、参考资料1. lex 源程序: Test.lex2. 参考函数:atoi()将字符串转换成整数。例如,调用atoi(“123”),得到整数123实验 1.3 递归下降分析一、实验目的1. 加深对递归下降分析的理解。二、

7、实验平台Windows + VC三、实验内容1. 选择一个文法或自己设计一个文法(应与范例中的文法不同),写出文法接受的语言2. 对该文法进行LL(1)判别,若不是LL(1)文法,则进行等价变换。3. 针对文法手工构造递归下降分析程序,实现以下功能: 输入一符号串, 输出语法分析的结果 (接受/出错)。 从文件中读入若干个符号串, 依次输出语法分析的结果 用可视化工具输出语法树四、设计文档1. 文法、文法描述的语言、预测分析表五、参考资料1.递归下降分析程序:“ 2-递归下降.c ”此程序对应的文法如下:G: (1) E-TG G+TGI-TG(3) Ge(4) T-FS(5) S*FS|/F

8、S(6) Se(7) F(E)(8) Fi实验 1.4 在 Windows 平台下使用 Flex 和 Bison一、实验目的1. 学习使用词法分析程序自动构造工具Flex和语法分析程序自动构造工具Bison二、实验平台Windows + Flex + Bison三、实验内容1. 实现以下步骤, 掌握 Flex 和 Bison 的工作过程a) 在DOS命令提示符下依次执行以下两行命令flex -olexyy.c calc.lex bison -ocalc.c calc.yb) 编译运行 calc.cc) 分析运行结果2. 用 Flex 和 Bison 实现以下功能(1) 扩充范例程序, 实现以下

9、功能之一乘方、开方运算按位运算-与、或、非 三角函数运算 -sin、cos. 其他功能(2) 编写Yacc程序,使其自动生成的C程序能够实现以下功能: 输入中缀表达式,输出后缀表达式参考属性文法:G: E tE + T print +E tTT tT*Fprint *T tFF t(E)F tiprint i(3) 扩充范例程序, 实现实数运算 (4)编写Yacc程序,使其自动生成的C程序能够实现以下功能: 输入二进制数, 输出十进制数参考属性文法G: N tSi.S N.v=S1.v+S.v*2-S.L S B S.v=S1.v*2+B.v, S.L=S1.L+1 S tB S.v=B.v,

10、 S.L=1 B t0 B.v=0 B t1 B.v=1 对给定文法G编与Yacc程序,使其自动生成的C程序能够实现以下功能读入输入符号串,若输入符号串合法,则输出括号()的对数G: S t ( L ) |aLt L , S |S参考语义规则:S t Sprint (S. num)St ( L )S. num := L.num + 1St aS. num := 0Lt L1 , SL. num := L1. num + S. numLt SL. num := S.num (5)四、设计文档1. 详细说明参考源程序 calc.lex 和 calc.y 实现的功能。2. 介绍自己添加的新功能。附程

11、序源码、测试用例。3. 完成附加题目的同学,附语义规则、程序源码、测试用例五、参考资料1. 源程序: calc.lexcalc.y 实验 1.5 用 YACC 自动构造语法分析程序一、实验目的1. 掌握语法法分析程序的自动构造方法2. 掌握语法分析程序自动构造工具Yacc的工作原理和使用方法3. 熟悉Yacc源程序语法4. 学习使用自动构造软件 Yacc二、实验平台Windows + Slex + Yacc三、实验内容用LEX和YACC自动构造一个PL/O程序的命令行解释程序,要求具有变量和常量定义语 句Var和Const,具有基本输入输出语句Read和Write,包含基本的算术运算+、-、*

12、、/和 ()运算,语句以分号(;结束,整个程序以END结束。1. 学习 YACC 语法的使用2. 使用 LEX 构造词法分析程序 yylex.c3. 使用 YACC 构造语法分析程序实现以下步骤,掌握Yacc的工作过程a) 构造YACC源程序,例如命名为PLO.YACb) 编译Yacc源程序,生成C语言语法分析程序plO.C在DOS命令提示符下执行编译YACC plO.yac 产生C语言代码plO.Cc) 编译plO.C,产生可执行程序plO.exed) 在 DOS 命令提示符下执行生成的 plO.exe输入程序示例如下:Const a =3 ;Var b,c ;Read(b);c := a

13、+ b ;Write(c) ;END.e) 察看运行结果,并对结果进行分析四、设计文档1. 解答:YACC所依据的文法是什么?2. 分析语法分析程序的自动生成原理。2. 分析生成的语法分析程序是如何工作的。五、参考资料1. Yacc 源程序: pl0.yac 实验 1.6 用 JFlex 构造词法分析程序一、实验目的1. 学习使用 Jflex二、实验平台Java三、实验内容1. 设计一个简单的语言,用正规式描述其词法规则。2. 下载词法分析程序自动生成工具 JFlexJFlex 本身采用 Java 语言编写,并且生成 Java 语言的词法分析源程序。下载Flex,根据你自己的安装配置,修改JF

14、lex安装目录下脚本文件binjflex.bat中的 两个环境变量JFLEX_HOME和JAVA_HOME的设置。然后运行JFlex附带的输入源 文件例子,以验证你是否正确安装并配置了 JFlex。3. 生成词法分析程序参考JFlex使用手册,构造词法分析程序。四、设计文档1.语言、词法规则描述、附J Flex源文件。五、参考资料1. 相关链接:http:/www.jflex.de/download.htmlhttp:/ http:/www.cs.princeton.edu/appel/modern/java/JLex/ 实验 1.7 用 JavaCUP 构造语法分析程序一、实验目的1. 学习使用 JavaCUP二、实验平台Java三、实验内容1. 从附录中选择一个语言。2. 下载语法分析程序自动生成工具 JavaCUPJavaCUP本身采用Java语言编写,并且生成Java语言的语法分析源程序。 下载JavaCUP,运行附带的输入源文件例子(一个基于命令行的简单计算器应用),以保 证你正确安装并配置了 Jav

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号