1 / 25
文档名称:

编译原理实验报告-语法分析.doc

格式:doc   大小:514KB   页数:25页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

编译原理实验报告-语法分析.doc

上传人:2982835315 2021/5/11 文件大小:514 KB

下载得到文件列表

编译原理实验报告-语法分析.doc

文档介绍

文档介绍:编译原理课程实验报告
实验2:语法分析
院系
软件学院
学号
任课教师
指导教师
实验地点
软件学院三楼机房
实验时间
2016/10/30/星期日
实验课表现
出勤、表现得分
实验报告
得分
实验总分
操作结果得分
一、需求分析
得分
要求:采用至少一种句法分析技术(LL(1)、SLR(1)、LR(1)或LALR(1))对类高级语言中的基本语句进行句法分析。阐述句法分析系统所要完成的功能。
本语法分析器是在词法分析器的基础上实现对类高级语言中的基本语句进行句法分析,基本功能如下:
(1)能识别以下几类语句:
声明语句(包括变量声明、数组声明、记录声明和过程声明)
表达式及赋值语句(包括数组元素的引用和赋值)
分支语句:if_then_else
循环语句:do_while
过程调用语句
(2)本语法分析器采用自顶向下的分析技术,能根据导入的文法,自动计算first集和follow集,能够生成每个产生式的select集,并自动生成预测分析表。
(3)本语法分析器具备语法错误处理能力,可以进行错误检测,如果检测到在出错时,采用恐慌模式,能够给出错误提示信息,格式:错误项 错误原因 行号
a)忽略输入中的一些符号,直到输入中出现选定的同步词法单元集合中的某个词法单元,同步集合的选取是非终结符的follow集;
b)如果终结符在栈顶而不能匹配,弹出此终结符。
c)输入栈中缺少某些应有的符号,比如只有右括号没有左括号等,会给出相应的提示。
(4)系统的输入形式多样:可以通过文件导入文法和测试用例,可以通过用户界面显示并编辑测试用例。测试用例涵盖了第(1)条中列出的各种类型的语句,并设置了一些语法错误。
(5)系统的输出分为两部分:一部分是打印输出语法分析器的FIRST集、FOLLOW集、select集和LL(1)分析表。另一部分是打印输出语法分析结果。
(6)本系统还实现了输出语法分析树的功能,让语法分析的过程更清晰。
二、文法设计
得分
要求:给出如下语言成分的文法描述。
声明语句(包括变量声明、数组声明、记录声明和过程声明)
表达式及赋值语句(包括数组元素的引用和赋值)
分支语句:if_then_else
循环语句:do_while
过程调用语句
本语法分析器主要针对C语言进行文法设计,下面给出各语言成分的文法描述。
程序入口:
Program->P
P->D P //支持连续声明
P ->S P
P->ε
声明语句:
D ® proc id ; D S|T id; //支持过程声明和变量声明
T →X C | recordD //支持结构体声明
X→ short|int | long|float|double|char|string//支持多种基本类型的声明
C → [num]C | ε //支持数组的声明
2)表达式及赋值语句:
S® id = E ;| L = E ;
E ® E + E | E * E | -E | (E) | id | digit | L
L ® id[E] | L[E]//支持数组元素的引用和赋值
控制流语句:
S ®if B then S1 else S2 | while B do S1
B → B || B //或语句
| B && B //且语句
| ! B //非语句
| (B) //使用括号
| E relop E //关系语句
| true //bool型
| false //bool型
relop → < | <= | == | != | > | >= //关系符号
4)过程调用语句
S ®callid (Elist)
Elist ® Elist, E
Elist ® E
下面给出整个程序的无二义性,无左递归的LL(1)文法:
Program->P
P->D P|S P|empty
D->proc T id ( M ) { P }|T id A ;|record id { P }
M->X id M'
M'->, X id M'|empty
A->= F|empty|, id A
F->digit|id|char|{ G }|string
G->H G'
G'->, H G'|emp