欢迎来到天天文库
浏览记录
ID:42184560
大小:192.09 KB
页数:11页
时间:2019-09-10
《【精品】语法分析报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理语法分析报告院(系)计算机学院专业班级计科0703班姓名李国强学号(班内序号)04071082(12)1•实验目的1、了解形式语言基础及其文法运算;2、熟悉语法分析原理及3种常用的语法分析方法;其中,三种算法为:(1)设计算术表达式的LL⑴分析算法(2)设计算术表达式的算符优先分析算法(3)设计算术表达式的SLR(l)分析算法3、选择上述一种方法并设计一个表达式的语法分析器运行环境:windowsxpvisualC++6.0任务分工:李国强负责:总体构思,以及问题处理,适用性测试。马彦辉负责:编写输入,以及求first,follow集,判断是否为LL(1)文
2、法聂敏天负责:编写判断一个字符串是否为输入文法的合法句型2•实验要求1、(必做)对于如下的文法,试编写调试一个语法分析程序E->E+T
3、TT—T*F
4、FF-I厂F
5、PP->(E)
6、i要求:1)选择一种语法分析方法(I丄⑴、算符优先、SLR(l))作为编制语法分析程序的依据。2)对于所选定的分析方法,如冇需要,应选择一种合适的数据结构,以构造所给文法的机内表示。3)能进行分析过程模拟。如输入一个旬子,能输出与句子对应的语法树,能对语法树生成过程进行模拟;能够输出分析过程每一步符号栈的变化情况。(2、3选做一题)2、FIRST集和FOLLOW集牛成算法模拟基木要求:1)
7、输入一个文法G;2)输出由文法G构造FIRST集的算法;3)输出FIRST集;4)输出由文法G构造FOLLOW集的算法;5)输出FOLLOW集。测试数据:文法G[E]:E->TE,E,->+TE,
8、eT-〉FT'T?-〉*F『
9、eF->(E)
10、i3、FTRSTVT集和LASTVT集生成算法模拟基木要求:1)输入一个文法G;2)输出由文法G构造FIRSTVT集的算法;3)输出FIRSTVT集;4)输出出文法G构造LASTVT集的算法;5)输出LASTVT集。测试数据:文法G[E]:E->TE,E,->+TE,
11、eT->FT,『->*FT,
12、eF->(E)
13、i3.实验内
14、容和步骤1.设计表达式的语法语法分析器算法2.编写代码并上机调试运行通过要求:输入表达式输岀表达式语法是否正确运用算术表达式的LL(1)分析算法来设计的表达式的语法分析器。LL(1)文法是一种自上而下的语法分析方法,它是从文法的识别符号出发,生成句子的最左推导,从左到右扫描源程序,每次向前查看1个字符,便能确定当前应该选择的产生式。LL(1)分析需要用到一个分析表M和一个符号栈S,分析表M是一个矩阵,它的元索可以存放一个非终结符的产生式,表明当符号栈S的栈顶元索非终结符遇到当前输入字符时,所应选择的产生式;M的兀素述可以是存放一个出错标志,说明符号栈S的栈顶元素非终
15、结符不应该遇到当前输入字符(终结符)。重复调用(1)分析方法对每一个输入字符进行分析,直到输入栈为空为止。数据定义intcount二0;/*分解的产生式的个数*/intnumber;/*所有终结符和非终结符的总数*/charstart;chartermin[50];charnon_ter[50];charv[50];charIeft[50];charright[50][50];/*开始符号*//*终结符号*//*非终结符号*//*所有符号*//*左部*//*右部*/charfirst[50][50],follow[50][50];/*各产生式右部的FIRST和左部的
16、FOLLOW集合*/charfirst1[50][50];charseIect[50][50];charf[50],F[50];charempty[20];charTEMP[50];intvaIidity=1;intI1=1;intM[20][20];charchoose;charempt[20];charfo[20];/*所有单个符号的FIRST集合*//*各单个产生式的SELECT集合*//*记录各符号的FIRST和FOLLOW是否已求过*//*记录可直接推出@的符号*//*求FOLLOW时存放某一符号串的FIRST集合*//*表示输入文法是否有效*//*表示输
17、入文法是否为LL(1)文法*//*分析表*//*用户输入时使用*//*求_emp()时使用*//*求FOLLOW集合时使用*//*[、"]、"j、■]、・(、"[、“kJj7■[、hj求单个符号的FIRSTvoidfirst2(inti){/*i为符号在所有输入符号中的序号*/charc.temp[20];intjtk.m;C=v[i];charch二’@‘;emp(ch);if(in(c,termin)=1)/*若为终结符*/first1[i][0]=c;firstl[i][1]=f *;eIseif(in(cfnon_ter)—1)/*若为非终结符*/{f
此文档下载收益归作者所有