编译原理实验报告四
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理实验报告
题目表达式语法分析程序的构造学院
专业
班级
学号
学生姓名
指导教师
西安思源学院教务处制
二〇一年
实验四表达式语法分析程序的构造
一、实验目的
1 掌握C++语言编译的语法分析程序
2 分别掌握LL(1)、算符优先、LR等语法分析方法的构造。
二、实验环境
Microsoft Visual C++ 6.0
三、实验内容
给定某一文法,试构造其简单优先矩阵(或LL(1)矩阵),并编制程序。给出相应句子的语法分析过程,判其正确性。
例如:给定文法G:
E→T E1
E1→+TE1/ε
T→FT1
T1→*F/ε
F→id/(E)
(1)先构造其SELECT集合,判定其是否为LL(1)文法
(2)是则构造其分析表
(3)给出句子id+id*id$的语法分析过程
四、设计说明
LL(1):
#include
#include
typedef int datatype;
char a[N3]={'$','E'};
char c[N4]={'$','z','*','z','+','z'};
char *B[N1][N2]={
" ", "z ", "+ " , "*" , "(" , ")", "$ ",
"E " , "xT", " " , " ", "xT", " ", " ",
"x ", " ", "xT+", " ", " ", "", "",
"T ", "yF", " ", " ", "yF ", " ", " ",
"y ", " ", "", "yF*", " ", "" , "",
"F ", "z", " ", " ", ")E(", " ", " ",
};
void FXB()
{
int i,j;
cout<<"分析表为: "< for(i=0;i { for(j=0;j {cout< cout< void WF() { int s; char *w[5]={"E->TE'","E'->TE'/e","T->FT'","T'->*F/e","F->(E)/id"}; cout<<"文法为: "< for(s=0;s<5;s++) {cout< } void SELECT() { cout<<"SELECT集合为:"< cout<<"1. select(E->TE')=FIRST(TE')={(,id}"< cout<<"2. select(E'->+TE')=FIRST(+TE')={+}"< cout<<"3. select(E'->e)=FIRST(E)UFOLLOW(E')-{e}={$,)}"< cout<<"4. select(T->FT')={(,id}"< cout<<"5. select(T'->*F)={*}"< cout<<"6. select(T'->e)={+,),$}"< cout<<"7. select(F->(E))={(}"<