东北大学编译原理实验报告二

东北大学编译原理实验报告二

ID:31327689

大小:506.00 KB

页数:8页

时间:2019-01-08

东北大学编译原理实验报告二_第1页
东北大学编译原理实验报告二_第2页
东北大学编译原理实验报告二_第3页
东北大学编译原理实验报告二_第4页
东北大学编译原理实验报告二_第5页
资源描述:

《东北大学编译原理实验报告二》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、word格式精心整理版编译原理程序设计实验报告——表达式语法分析器的设计与实现班级:姓名:学号:实验目标:用两种不同的方法设计一个表达式的语法分析器实验内容:①LL(1)分析法   LL(1)文法是一种自上而下的语法分析方法,它是从文法的识别符号出发,生成句子的最左推导,从左到右扫描源程序,每次向前查看1个字符,便能确定当前应该选择的产生式。LL(1)分析需要用到一个分析表M和一个符号栈S,分析表M是一个矩阵,它的元素可以存放一个非终结符的产生式,表明当符号栈S的栈顶元素非终结符遇到当前输入字符时,所应选择的产生式

2、;M的元素还可以是存放一个出错标志,说明符号栈S的栈顶元素非终结符不应该遇到当前输入字符(终结符)。  重复调用LL(1)分析方法对每一个输入字符进行分析,直到输入栈为空为止。②递归下降子程序递归下降分析法,在判断一个表达式时首先进入E然后调用T在调用F,判断是否为“(”或字符或常数,如果不是报错,是“(”的话再进入E,是字符或常数的话跳出递归。然后进入T中下一步,判断是否为“*”,是的话进入T子递归,不是的话跳出,进入E的下一步判断是否为“+”,是的话进入E的子递归,不是的话跳出回到主程序。当ch标识符为#时结束

3、。范文范例学习指导word格式精心整理版源程序代码:(加入注释)LL(1)分析算法:#include范文范例学习指导word格式精心整理版#includeusingnamespacestd;#defineSTACKSIZE50#defineSTACKINCREMENT10#defineOK1#defineerror0#defineoverflow-1typedefcharSElemType;typedefintStatus;typedefstruct{SElemType*ba

4、se;SElemType*top;Intstacksize;}SqStack;StatusInitStack(SqStack&S){S.base=(SElemType*)malloc(STACKSIZE*sizeof(SElemType));if(!S.base)exit(overflow);S.top=S.base;S.stacksize=STACKSIZE;returnOK;}StatusPush(SqStack&S,SElemTypee){if(S.top-S.base>=S.stacksize){S.bas

5、e=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(overflow);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}(S.top)++;*(S.top)=e;returnOK;}StatusPop(SqStack&S,SElemType&e){if(S.top==S.base)returnerror;e=*(S.top)

6、;S.top--;范文范例学习指导word格式精心整理版returnOK;}StatusGrammerAnalysis(SqStack&S,char*ch,charc){SElemTypee;Push(S,'#');Push(S,'E');while(!((*(S.top)=='#')&&(c=='#'))){Pop(S,e);if((e=='E')&&(((c>='0')&&(c<='9'))

7、

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

9、

10、(c=='('))){Push(S,'A');Push(S,'T');}elsei

11、f((e=='A')&&(c=='+')){Push(S,'A');Push(S,'T');ch++;c=*ch;}elseif((e=='A')&&((c==')')

12、

13、(c=='#')));elseif((e=='T')&&(((c>='0')&&(c<='9'))

14、

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

16、

17、(c=='(')))Push(S,'B');Push(S,'F');}elseif((e=='B')&&(c=='*')){Push(S,'B');Push(S,'F');ch++;c=*ch;}elseif(

18、(e=='B')&&((c=='+')

19、

20、(c==')')

21、

22、(c=='#')));elseif((e=='F')&&((c>='0'&&c<='9')

23、

24、(c>='a'&&c<='z'))){ch++;while(((c=*ch)>='0')&&(c<='9')

25、

26、(c>='a'&&c<='z'))ch++;}elseif((e=='F')&&(c=='(

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

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

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