语法分析-编译原理

语法分析-编译原理

ID:43573239

大小:186.87 KB

页数:25页

时间:2019-10-11

语法分析-编译原理_第1页
语法分析-编译原理_第2页
语法分析-编译原理_第3页
语法分析-编译原理_第4页
语法分析-编译原理_第5页
资源描述:

《语法分析-编译原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验报告2014211309-2014211386■张宇威一、实验题目:题目:语法分析程序的设计与实现。实验内容:编写语法分析程序,实现对算术表达式的语法分析。要求所分析算术表达式由如下的文法产生。E^E^TE-TTTtT*/?

2、卩//?

3、/?FT(F)

4、num实验要求:在对输入表达式进行分析的过程中,输出所采用的产生式。方法1:编写递归调用程序实现自顶向下的分析。方法2:编写LL(1)语法分析程序,要求如下。(1)编程实现算法4.2,为给定文法自动构造预测分析表。(2)编程实现算法4.1,构造L

5、L(1)预测分析程序。二、程序设计说明(1)用算法4.2构建预测分析表:注释:#代表空。1.先消除左递归:EITE“E'T+7F'I#

6、-TE'TtFT'T,t*尸厂

7、/FT"#Ft(E)

8、num2.为每个非终结符构建FIRST集和FOLLOW集E'FIRST(,num+「#(,num#?,/(‘numFOLLOW$,)$,)+/-/$,)+/-/$/)n3.算法:for(文法G的每一个产生式A->

9、3){for(每个终结符号beFIRST(P))把A■邛放入表项M[A,P];if(#丘FIRST⑹

10、)for(每个aEFOLLOW(A))把A->p放入表项M[A,a]中;}(2)编程实现算法4.1,构造LL(1)预测分析程序。输入符号串w,若weL(G)则输出w的最左推导否则报告错误。首先初始化,将$压入栈底,将文法开始符号E压入栈底,将w$放入缓冲区,并指向/4的第一个带输入符号开始分析。然后,预测分析控制程序根据分析表M对输入符号串w作出自顶向下分析do{X=gettop();a是待输入的一个字符;if(X是终结符号

11、

12、$)if(X==a){从栈顶染弹出X;ip指向输入字符指针前移;}els

13、eerror();elseif(M[X,a]=X->Y1Y2...Yk){从栈顶弹出X;依次把Y1Y2...Yk反序入栈;输出产生式X->Y1Y2...Yk;}elseerror();}while(X!=$)三、源程序LL(1)#include#include#include#include#include#include#defineSTACK_INIT_SIZE100#defineSTACKI

14、NCREMENT10#defineSEIemTypecharusingnamespacestd;typedefstruct{SEIemType*base;SEIemType*top;intstacksize;}SqStack;intlnitStack(SqStack&S){S.base=(SEIemType*)malloc(STACK_INIT_SIZE*sizeof(SEIemType));if(SS.base)return0;S.top=S.base;S.stacksize=STACK_INIT_

15、SIZE;return1;}SEIemTypeGetTop(SqStackS){SEIemTypee;if(S.top==S.base)cout«"can'tgettop"«endl;elsee=*(S.top-1);returne;}voidPush(SqStack&S,SEIemTypee){if(S.top-S.base>=S.stacksize){S.base=(SEIemType*)realloc(S.base,(STACKINCREMENT+S.stacksize)sizeof(SEIem

16、Type));if(iS.base)cout«"carVtpush”vvendl;S.top=S.base+S.stacksize;S.stacksize=S.stacksize+STACKINCREMENT;}*S.top++=e;}voidPop(SqStack&S,SEIemType&e){if(S.base==S.top)cout«”can'tpop"«endl;else{e=—S.top;}charFirst⑸[10]={{'*}};charFollow[5][10]={,,};st

17、ringtable[5][8]={{””}};stringinput[5][5]={{””}};//LLcharEnd[8];//终结符号集voidlnitialLL(){End[0]='n1;End[1]=*+';End[2]=End[3]=TEnd[4]=7:End[5]=f;End⑹='):End[7]=$;First[O][O]=*(';First[0][1]=h;//EFirst[1][0]=•+*;First[1][1]='・';First[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。