LR分析器的实现

LR分析器的实现

ID:36441191

大小:93.00 KB

页数:11页

时间:2019-05-10

LR分析器的实现_第1页
LR分析器的实现_第2页
LR分析器的实现_第3页
LR分析器的实现_第4页
LR分析器的实现_第5页
资源描述:

《LR分析器的实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、LR分析器的实现一.实验目的1、掌握下推机这一数学模型的结构和理论,并深刻理解下推自动机在LR分析法中的应用(即LR分析器)。2、掌握LR分析法的思想,学会特定分析表的构造方法,利用给出的分析表进行LR分析。二.实验内容根据课堂讲授的形式化算法,编制程序实现LR分析器,结合给定的分析表,对一个输入语句语法分析,判断是否符合相应的文法要求。三.实验要求要求实现以下功能:a) 组织分析表(可以是SLR、LR(0)、LR(1)或者LALR(1)分析表)和语句的输入b) 要实现通用的LR分析思想的源代码c) 输出对语句的语法分

2、析判断结果,如果可能给出错误的信息提示四.实现方法根据课本的LR分析器模型和LR分析算法,实现一高级语言程序,完成LR分析。分析表可以上面提到的任何一种,只输入即可,不要求构造分析表。对c要求中的错误信息提示,指的是对应分析表中的空白处,每一个空白的地方都应该有对应的错误情况,因而有相应的错误信息。注意这里的语法分析,是在词法分析的基础上进行的。五.设计题目及内容设计题目:根据LR分析表构造LR分析器内容:已知文法G:(1)E→E+T(2)E→T(3)T→T*F(4)T→F(5)F→(E)(6)F→ILR分析表: AC

3、TION(动作)GOTO(转换)状态 I + * ( ) # E T F0S5  S4  1231 S6   Acc   2 R2S7 R2R2   3 R4R4 R4R4   4S5  S4  8235 R6R6 R6R6   6S5  S4   937S5  S4    108 S6  S11    9 R1S7 R1R1   10 R3R3 R3R3   11 R5R5 R5R5    六.实验代码#include#include//0--11表示状态结点,21--26表示规

4、约标号,//-1表示error(出错),12表示acc(接受)inttable[13][9]={{5,-1,-1,4,-1,-1,1,2,3},  {-1,6,-1,-1,-1,12,-1,-1,-1},  {-1,22,7,-1,22,22,-1,-1,-1},  {-1,24,24,-1,24,24,-1,-1,-1},  {5,-1,-1,4,-1,-1,8,2,3},  {-1,26,26,-1,26,26,-1,-1,-1},  {5,-1,-1,4,-1,-1,-1,9,3},  {5,-1,

5、-1,4,-1,-1,-1,-1,10},  {-1,6,-1,-1,11,-1,-1,-1,-1},  {-1,21,7,-1,21,21,-1,-1,-1},  {-1,23,23,-1,23,23,-1,-1,-1},  {-1,25,25,-1,25,25,-1,-1,-1}};//规约规则structrule{charx;int y;}r[6]={{'E',3},{'E',1},{'T',3},{'T',1},{'F',3},{'F',1}};//输入字符charindex_char[9]={'i',

6、'+','*','(',')','#','E','T','F'};////获取index_char[9]中元素的位置intget_index_char(chari){for(intj=0;j<9;j++){if(index_char[j]==i) returnj;}return-1;} #defineMAX20typedefstruct{int stack[MAX];inttop;}status;//初始化栈voidinit_stack(status*p){if(!p)printf("初始化状态栈出错!");p

7、->top=-1;}//压栈voidpush(status*p,intx){if(p->toptop++;p->stack[p->top]=x;}elseprintf("状态栈溢出!");}//弹栈intpop(status*p){intx;if(p->top!=0){x=p->stack[p->top];p->top--;returnx;}else{printf("状态栈1空!");return0;}}//取栈顶元素intget_top(status*p){intx;if(p->

8、top!=-1){x=p->stack[p->top];returnx;}else{printf("状态栈2空!");return0;}}//遍历栈元素voidout_stack(status*p){inti;if(p->top<0)printf("状态栈3空!");for(i=0;i<=p->top;i++){p

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

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

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