编译原理实验LL1分析法.doc

编译原理实验LL1分析法.doc

ID:52916271

大小:87.50 KB

页数:10页

时间:2020-03-31

编译原理实验LL1分析法.doc_第1页
编译原理实验LL1分析法.doc_第2页
编译原理实验LL1分析法.doc_第3页
编译原理实验LL1分析法.doc_第4页
编译原理实验LL1分析法.doc_第5页
资源描述:

《编译原理实验LL1分析法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理程序设计实验报告——表达式语法分析器的设计实现班级:计算机1306班姓名:王利达学号:20133959实验目标:使用LL(1)分析法构造表达式语法分析器程序,判别算术表达式,给出判别结果。实验内容:一、概要设计1.算术表达式文法:E→T

2、Eω0TT→F

3、Tω1FF→i

4、(E)其中ω0:+-ω1:*/i:数字或常数文法变换:E→TMM→ω0TM

5、εT→F

6、NN→ω1FN

7、εF→i

8、(E)其中ω0:+-ω1:*/i:数字或常数2.LL(1)分析表表1.LL(1)分析表i+-*/()#EMT,pMT,pMMT,nMT,n

9、ε,pε,pTNF,pNF,pNNF,nNF,nε,pε,pFε,n)E,n)ε,n#OK二、数据结构1.输入表达式定义char型数组expstr为存放输入表达式的数组,charexpstr[100];2.分析栈定义一个栈来进行LL(1)分析。栈中有bottom、top、stacksize等元素,用于程序调用栈和对栈操作。typedefstruct//定义语法的栈{SElemType*bottom;//底SElemType*top;//顶intstacksize;}SqStack;(包括:概要设计、数据结构、流程图、关键函

10、数等有选择填写)源程序代码:(加入注释)#include#include#includeusingnamespacestd;#defineSTACKSIZE30//栈大小#defineSTACKINCREMENT10//栈增量#defineOK1#defineError0#defineOVERFLOW-1typedefcharSElemType;typedefintStatus;inti=0;intcount1=0;intcount2=0;//计数终结符的个数char

11、expstr[100];typedefstruct//定义语法的栈{SElemType*bottom;//底SElemType*top;//顶intstacksize;}SqStack;StatusInitStack(SqStack&S)//初始化栈{S.bottom=(SElemType*)malloc(STACKSIZE*sizeof(SElemType));if(!S.bottom)exit(OVERFLOW);S.top=S.bottom;S.stacksize=STACKSIZE;returnOK;}Status

12、PUSH(SqStack&S,SElemTypee){if(S.top-S.bottom>=S.stacksize){S.bottom=(SElemType*)realloc(S.bottom,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.bottom)exit(OVERFLOW);S.top=S.bottom+S.stacksize;S.stacksize+=STACKINCREMENT;}*(S.top)=e;(S.top)++;returnOK;}Stat

13、usPOP(SqStack&S,SElemType&e){if(S.top==S.bottom)returnError;S.top--;e=*(S.top);returnOK;}voidwrong()//调用此函数,表示出错{cout<<"Wrong!"<

14、

15、(s[n]==')')

16、

17、(s[n]>='0'&&s[n]<='9')

18、

19、(s[n]>='a'&&s[n]<='z')

20、

21、

22、(s[n]=='+')

23、

24、(s[n]=='-')

25、

26、(s[n]=='*')

27、

28、(s[n]=='/')

29、

30、(s[n]=='#'))return1;elsereturn0;}boolter_judge(charc)//终结符集合与非终结符集合{if((c=='(')

31、

32、(c==')')

33、

34、(c>='0'&&c<='9')

35、

36、(c>='a'&&c<='z')

37、

38、(c=='+')

39、

40、(c=='-')

41、

42、(c=='*')

43、

44、(c=='/'))return1;//终结符返回1else//if(c=='E'

45、

46、c=='E1'

47、

48、c==

49、'T'

50、

51、c=='T1'

52、

53、c=='F')return0;//非终结符或#,返回0}boolnum_letter(chars[],inti)//判断当前字符是数字还是字母{if((s[i]>='0'&&s[i]<='9')

54、

55、(s[i]>='a'&&s[i]<='z')){i++;while((s[i]

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

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

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