欢迎来到天天文库
浏览记录
ID:33577704
大小:206.18 KB
页数:15页
时间:2019-02-27
《编译原理课程实践环节》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《编译原理》课程实践环节如果你对本课程实践环节的题目、要求或内容等方面的设计有任何意见或建议,欢迎联系中山大学计算机科学系李文军老师(lnslwj@zsu.edu.cn)。实验题目:程序设计语言SP的自动排版工具在正式开始你的实验之前,请务必花足够时间仔细阅读完本文档关于实验的描述与约定!实验目的本实验是一个基于编译原理课程核心教学内容的综合性实验,利用一门简单程序设计语言的处理工具设计与实现,帮助学生通过实践深入理解和牢固掌握编译技术中词法分析、语法分析、语法制导翻译等重要环节。本实验的主要目
2、标包括:1、掌握词法分析器的工作原理与构造方法,并能够推广到对文本的串匹配搜索等其他同类型应用。2、掌握词法分析器自动生成工具lex或类似工具的工作原理与使用方法,学习如何编写一个lex源文件以解决词法分析或模式匹配问题,初步体会软件自动化的基本思路。3、掌握递归下降的预测分析方法以及语法制导的翻译技术,学习如何根据BNF语法定义和应用需求设计一个翻译模式,并利用高级程序设计语言的递归机制实现一个翻译模式。4、掌握语法分析器自动生成工具yacc或类似工具的工作原理与使用方法,学习如何编写一个ya
3、cc源文件以解决语法分析及语法制导翻译问题,进一步加深体会软件自动化的基本思路。5、通过加强设计方面的讨论与编程风格的实践,提高对面向对象设计的认识,养成良好的编程习惯与规范,并学会多个工程文档的组织与提交。李文军:《编译原理》课程实践环节程序设计语言SPSP是一门支持简单算术功能的玩具型程序设计语言,易于分析和实现,适合作为语言实现初学者的处理对象。SP语言是一门大小写无关语言,其程序中仅允许使用33个变量,其名字分别为X、Y、Z、X0、…、X9、Y0、…、Y9、Z0、…、Z9;所有变量和表达
4、式的类型均为整数类型。SP语言仅支持四类语句,其语义描述如下:READvar从控制台读入一个int类型的值,并保存在变量var中WRITEexpr将表达式expr的值输出到控制台LETvar=expr将变量var的当前值设置为表达式expr的值GOTOlabel[IFexpr]跳转到指定的行;如果指定表达式expr,则仅当expr≧0时才跳转SP语言语法定义的完整BNF描述如下:::=
5、::=6、ber>:;7、;::=READ8、WRITE9、LET=10、GOTO11、GOTOIF::=12、+13、-::=14、*15、/::=()16、17、::=18、19、::=20、::=a21、b22、...23、z24、A25、B26、...27、Z::=028、129、...30、9例如,以下SP源程序可用于计算两个非负整数X和Y的最大公约数:READX;READY;100:GOTO200IFY-X;LETX=X-Y;GOTO100;200:GOTO300IFX-Y;LETY=Y-X;GOTO100;300:WRITEX;-2-李文军:《编译原理》课程实践环节实验31、一:熟悉BNF定义SP语言的BNF定义给出了该语言语法方面的形式化规格说明。仔细阅读SP语言的BNF定义,并完成以下实验内容。实验步骤步骤1.1、编写SP源程序遵循SP语言的BNF定义,编写两个语法正确的SP源程序。要求在这两个源程序中,用到SP语言的所有语法构造,即你编写的两个源程序加在一起覆盖了SP语言提供的语句、表达式、变量、数值等各种构造。如果有可能,你编写的SP源程序最好是有其实际意义的,譬如一个求阶乘的程序或一个求最小公因子的程序等。注意,这里仅要求你编写语法正确的SP源程序,并未强32、制要求这些源程序是语义正确的。然后,参考SP语言的BNF定义,编写两个含有语法错误的SP源程序。要求在这两个源程序中,既包含一些词法错误(例如:不合法的标识符、不合法的常量等),也包含一些语法错误(例如:括号不匹配、表达式缺少运算符、表达式缺少操作数、命令缺少关键字等)。这些语法正确的和语法错误的SP源程序将在后述实验步骤中作为你的测试用例。步骤1.2、讨论SP程序的二义性根据SP语言的BNF定义,讨论SP程序的二义性问题,即讨论根据上述BNF定义的上下文无关文法是否存在二义性。如果你认为该文法
6、ber>:;
7、;::=READ
8、WRITE
9、LET=
10、GOTO
11、GOTOIF::=
12、+
13、-::=
14、*
15、/::=()
16、
17、::=
18、
19、::=
20、::=a
21、b
22、...
23、z
24、A
25、B
26、...
27、Z::=0
28、1
29、...
30、9例如,以下SP源程序可用于计算两个非负整数X和Y的最大公约数:READX;READY;100:GOTO200IFY-X;LETX=X-Y;GOTO100;200:GOTO300IFX-Y;LETY=Y-X;GOTO100;300:WRITEX;-2-李文军:《编译原理》课程实践环节实验
31、一:熟悉BNF定义SP语言的BNF定义给出了该语言语法方面的形式化规格说明。仔细阅读SP语言的BNF定义,并完成以下实验内容。实验步骤步骤1.1、编写SP源程序遵循SP语言的BNF定义,编写两个语法正确的SP源程序。要求在这两个源程序中,用到SP语言的所有语法构造,即你编写的两个源程序加在一起覆盖了SP语言提供的语句、表达式、变量、数值等各种构造。如果有可能,你编写的SP源程序最好是有其实际意义的,譬如一个求阶乘的程序或一个求最小公因子的程序等。注意,这里仅要求你编写语法正确的SP源程序,并未强
32、制要求这些源程序是语义正确的。然后,参考SP语言的BNF定义,编写两个含有语法错误的SP源程序。要求在这两个源程序中,既包含一些词法错误(例如:不合法的标识符、不合法的常量等),也包含一些语法错误(例如:括号不匹配、表达式缺少运算符、表达式缺少操作数、命令缺少关键字等)。这些语法正确的和语法错误的SP源程序将在后述实验步骤中作为你的测试用例。步骤1.2、讨论SP程序的二义性根据SP语言的BNF定义,讨论SP程序的二义性问题,即讨论根据上述BNF定义的上下文无关文法是否存在二义性。如果你认为该文法
此文档下载收益归作者所有