欢迎来到天天文库
浏览记录
ID:58705148
大小:89.00 KB
页数:9页
时间:2020-10-24
《编译原理实验指导.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理实验指导实验安排:上机实践按小组完成实验任务。每小组三人,分别完成TEST语言的词法分析、语法分析、语义分析和中间代码生成三个题目,语法分析部分可任意选择一种语法分析方法。先各自调试运行,然后每小组将程序连接在一起调试,构成一个相对完整的编译器。实验报告:上机结束后提交实验报告,报告内容:1.小组成员;2.个人完成的任务;3.分析及设计的过程;4.程序的连接;5.设计中遇到的问题及解决方案;6.总结。8实验一词法分析一、实验目的 通过设计编制调试TEST语言的词法分析程序,加深对词法分析原理的理解。并
2、掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。二、实验预习提示1.词法分析器的功能和输出格式词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。2.TEST语言的词法规则→
3、ID
4、ID→5、>6、NUM→a7、b8、…9、z10、A11、B12、…13、Z→114、215、…16、917、0→+18、-19、*20、/21、=22、(23、)24、{25、}26、:27、,28、;29、<30、>31、!→>=32、<=33、!=34、==→/*→*/三、实验过程和指导1.阅读课本有关章节,明确语言的语法,画出状态图和词法分析算法流程图。2.编制好程序。3.准备好多组测试数据。4.程序要求程序输入/输出示例:8输入如下一段:{inta,b;a=10;b=a*35、6;}要求输出为:{{intintIDa,,IDb;;IDa==NUM10;;IDb==IDa**NUM6;;}}5.修改状态图、算法流程图及程序,使得该程序能够识别注释结束符“*/”。8实验二递归下降分析法一、实验目的 根据算术表达式文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。二、实验预习提示1.递归下降分析法的功能递归下降分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2.递归下降分析法的前提改造文法:消除二义性、消除左递36、归、提取左因子,判断是否为LL(1)文法,3.递归下降分析法实验设计思想及算法为G的每个非终结符号U构造一个递归过程,不妨命名为U。U的产生式的右边指出这个过程的代码结构:(1)若是终结符号,则和当前输入符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当U的右部有多个产生式时,可用选择结构实现。具体为:(1)对于每个非终结符号U→u137、u238、…39、un处理的方法如下:U(){ch=当前符号;if(ch可能是u1字的开头)处理u1的程序部分;elseif(ch可能是u240、字的开头)处理u2的程序部分;…elseerror()}(2)对于每个右部u1=x1x2…xn的处理架构如下:处理x1的程序;处理x2的程序;8…处理xn的程序;(3)对于右部中的每个符号xi①如果xi为终结符号:if(xi==当前的符号){读入下一符号;return;}else出错处理②如果xi为非终结符号,直接调用相应的过程xi()三、实验过程和指导1.阅读课本有关章节。2.考虑好设计方案。3.设计出模块结构、测试数据,编制好程序。4.程序要求程序输入/输出示例:对下列文法,用递归下降分析法对任意输入的符号串41、进行分析:(1)E→TG(2)G→+TG42、—TG(3)G→ε(4)T→FS(5)S→*FS43、/FS(6)S→ε(7)F→(E)(8)F→i输出的格式如下:输入:以#结束的符号串(包括+—*/()i#):输出结果:i+i*i#为合法符号串表达式中允许使用运算符(+-*/)、分隔符(括号)、字符i,结束符#;如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);对学有余力的同学,可以详细的输出推导的过程,即详细列出每一步使用的产生式。85.也可以参考课本实现TEST语言的语法分析程序。8实验三后缀式的产生与计44、算一、实验目的 将非后缀式用来表示的算术表达式转换为用后缀式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。二、实验预习提示1.后缀式定义将运算对象写在前面,而把运算符号写在后面。后缀式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用后缀式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。2.后缀式生成的实验设计思想及算法 (1)首先构
5、>
6、NUM→a
7、b
8、…
9、z
10、A
11、B
12、…
13、Z→1
14、2
15、…
16、9
17、0→+
18、-
19、*
20、/
21、=
22、(
23、)
24、{
25、}
26、:
27、,
28、;
29、<
30、>
31、!→>=
32、<=
33、!=
34、==→/*→*/三、实验过程和指导1.阅读课本有关章节,明确语言的语法,画出状态图和词法分析算法流程图。2.编制好程序。3.准备好多组测试数据。4.程序要求程序输入/输出示例:8输入如下一段:{inta,b;a=10;b=a*
35、6;}要求输出为:{{intintIDa,,IDb;;IDa==NUM10;;IDb==IDa**NUM6;;}}5.修改状态图、算法流程图及程序,使得该程序能够识别注释结束符“*/”。8实验二递归下降分析法一、实验目的 根据算术表达式文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。二、实验预习提示1.递归下降分析法的功能递归下降分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。2.递归下降分析法的前提改造文法:消除二义性、消除左递
36、归、提取左因子,判断是否为LL(1)文法,3.递归下降分析法实验设计思想及算法为G的每个非终结符号U构造一个递归过程,不妨命名为U。U的产生式的右边指出这个过程的代码结构:(1)若是终结符号,则和当前输入符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过程。当U的右部有多个产生式时,可用选择结构实现。具体为:(1)对于每个非终结符号U→u1
37、u2
38、…
39、un处理的方法如下:U(){ch=当前符号;if(ch可能是u1字的开头)处理u1的程序部分;elseif(ch可能是u2
40、字的开头)处理u2的程序部分;…elseerror()}(2)对于每个右部u1=x1x2…xn的处理架构如下:处理x1的程序;处理x2的程序;8…处理xn的程序;(3)对于右部中的每个符号xi①如果xi为终结符号:if(xi==当前的符号){读入下一符号;return;}else出错处理②如果xi为非终结符号,直接调用相应的过程xi()三、实验过程和指导1.阅读课本有关章节。2.考虑好设计方案。3.设计出模块结构、测试数据,编制好程序。4.程序要求程序输入/输出示例:对下列文法,用递归下降分析法对任意输入的符号串
41、进行分析:(1)E→TG(2)G→+TG
42、—TG(3)G→ε(4)T→FS(5)S→*FS
43、/FS(6)S→ε(7)F→(E)(8)F→i输出的格式如下:输入:以#结束的符号串(包括+—*/()i#):输出结果:i+i*i#为合法符号串表达式中允许使用运算符(+-*/)、分隔符(括号)、字符i,结束符#;如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);对学有余力的同学,可以详细的输出推导的过程,即详细列出每一步使用的产生式。85.也可以参考课本实现TEST语言的语法分析程序。8实验三后缀式的产生与计
44、算一、实验目的 将非后缀式用来表示的算术表达式转换为用后缀式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。二、实验预习提示1.后缀式定义将运算对象写在前面,而把运算符号写在后面。后缀式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用后缀式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。2.后缀式生成的实验设计思想及算法 (1)首先构
此文档下载收益归作者所有