编译原理实验指导
- 格式:doc
- 大小:89.00 KB
- 文档页数:9
编译原理实验指导
实验安排:
上机实践按小组完成实验任务。每小组三人,分别完成TEST语言的词法分析、语法分析、语义分析和中间代码生成三个题目,语法分析部分可任意选择一种语法分析方法。先各自调试运行,然后每小组将程序连接在一起调试,构成一个相对完整的编译器。
实验报告:
上机结束后提交实验报告,报告内容:
1.小组成员;
2.个人完成的任务;
3.分析及设计的过程;
4.程序的连接;
5.设计中遇到的问题及解决方案;
6.总结。
实验一词法分析
一、实验目的
通过设计编制调试TEST语言的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。
二、实验预习提示
1.词法分析器的功能和输出格式
词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示
成以下的二元式(单词种别码,单词符号的属性值)。
2.TEST语言的词法规则
三、实验过程和指导
1.阅读课本有关章节,明确语言的语法,画出状态图和词法分析算法流程图。
2.编制好程序。
3.准备好多组测试数据。
4.程序要求
程序输入/输出示例:
输入如下一段:
{ int a, b ;
a = 10 ;
b = a * 6 ;
}
要求输出为:
{ {
int int
ID a
, ,
ID b
; ;
ID a
= =
NUM 10
; ;
ID b
= =
ID a
* *
NUM 6
; ;
} }
5.修改状态图、算法流程图及程序,使得该程序能够识别注释结束符“*/”。
实验二递归下降分析法
一、实验目的
根据算术表达式文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
二、实验预习提示
1.递归下降分析法的功能
递归下降分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。
2.递归下降分析法的前提
改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法,3.递归下降分析法实验设计思想及算法
为G的每个非终结符号U构造一个递归过程,不妨命名为U。
U的产生式的右边指出这个过程的代码结构:
(1)若是终结符号,则和当前输入符号对照,
若匹配则向前进一个符号;否则出错。
(2)若是非终结符号,则调用与此非终结符对应的过程。当U的右部有多个产生式时,
可用选择结构实现。
具体为:
(1)对于每个非终结符号U→u1|u2|…|un处理的方法如下:
U( )
{
ch=当前符号;
if(ch可能是u1字的开头) 处理u1的程序部分;
else if(ch可能是u2字的开头)处理u2的程序部分;
…
else error()
}
(2)对于每个右部u1=x1x2…x n的处理架构如下:
处理x1的程序;
处理x2的程序;
…
处理x n的程序;
(3)对于右部中的每个符号x i
①如果x i为终结符号:
if(x i= = 当前的符号)
{
读入下一符号;
return;
}
else
出错处理
②如果x i为非终结符号,直接调用相应的过程x i()
三、实验过程和指导
1.阅读课本有关章节。
2.考虑好设计方案。
3.设计出模块结构、测试数据,编制好程序。
4.程序要求
程序输入/输出示例:
对下列文法,用递归下降分析法对任意输入的符号串进行分析:(1)E→TG
(2)G→+TG|—TG
(3)G→ε
(4)T→FS
(5)S→*FS|/FS
(6)S→ε
(7)F→(E)
(8)F→i
输出的格式如下:
输入:以#结束的符号串(包括+—*/()i#):
输出结果:i+i*i#为合法符号串
表达式中允许使用运算符(+-*/)、分隔符(括号)、字符i,结束符#;
如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);
对学有余力的同学,可以详细的输出推导的过程,即详细列出每一步使用的产生式。
5. 也可以参考课本实现TEST语言的语法分析程序。