编译原理语法分析器

编译原理语法分析器

ID:9408340

大小:29.50 KB

页数:7页

时间:2018-04-30

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

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

1、语法分析一、实验任务本实验的任务是编写整数算术表达式的递归下降语法分析程序,它从左至右逐个扫描输入单词,分析输入单词符号串是否合乎算术表达式语法。具体任务有:●组织算术表达式的输入。●拼出单词并转换成机内表示形式。●在词法分析基础上分析表达式语法。●发现并定位语法错误。●打印错误信息。二、实验要求1.整数加减乘除四则运算表达式文法G[E]如下所示:E->E+T

2、E-T

3、TT->T*F

4、T/F

5、FF->(E)

6、i(i是整常数)文法是含回溯和左递归的上下文无关文法,实验要求首先将文法转换成等价的LL(1)文法,再从转换后的LL(1)文法构造出整数四则运算表达式的递归下降分析器。2

7、.能检查并处理某些语法错误,一旦发现错误,输出错误位置及错误类型,可停止分析或进行错误恢复处理(同学们自行选择处理方式)。错误类型:(同学们自行定义,如)1:非法字符。2:…三、实验内容1.将文法G[E]转化为LL(1)文法1)提取公共左因子如E->E+T

8、E-T

9、T提取公共左因子得到E->EE1

10、T(1)E1->+T

11、-T(2)2)消除左递归,如上(1)消除左递归得到E->TE2(1)’E2->E1E2

12、e(空串)(3)2.参照实验1、书P74和附录1的方法,实现整数算术表达式的递归下降语法分析程序四、程序代码以下的代码只支持7种节点——加减乘除,标识符,数字,表达式。想要

13、加入其他节点,在opprio数组中加入优先级。1)////////////////////////////////Parse.h//////////////////////////////////2)1)#ifndef_PARSE_H_2)#define_PARSE_H_3)#include"lexical.h"4)5)//算法优先文法中优先级关系枚举6)typedefenum{LS,GT,EQ,UN}Priority;7)//移进归约算法中使用到的栈节点结构(双向链表)8)typedefstruct_pstacktoken9){10)LexToken*ptoken;11)s

14、truct_pstacktoken*pr;12)struct_pstacktoken*nt;13)struct_pstacktoken*child;14)}PStackToken;15)voidPStackPush(LexToken*t);16)LexToken*PStackPop();17)18)//产生式链表节点结构(单向链表)19)typedefstruct_generator{LexTokenType*gen;intsize;struct_generator*nt;}Generator;20)PStackToken*Parse(char*Source);21)22)#

15、endif//_PARSE_H23)////////////////////////////////////////Parse.c/////////////////////////////24)#include"Parse.h"25)#include26)#include27)#include28)#include29)30)//各个运算符之间的优先级定义31)#defineOPNUM732)Priorityopprio[OPNUM][OPNUM]={33){GT,GT,LS,LS,LS,LS,GT

16、,},34){GT,GT,LS,LS,LS,LS,GT,},35){GT,GT,GT,GT,LS,LS,GT,},36){GT,GT,GT,GT,LS,LS,GT,},37){GT,GT,GT,GT,UN,UN,GT,},38){GT,GT,GT,GT,UN,UN,GT,},39){LS,LS,LS,LS,LS,LS,EQ,},40)};41)PriorityPrioCmp(LexTokenTypefirst,LexTokenTypesecond)//这段函数被优化代码替代1){2)if(first>=OPNUM

17、

18、second>=OPNUM)3)returnUN;4)ret

19、urnopprio[first][second];5)}6)7)8)PStackToken*PSbot=NULL;//栈底指针9)PStackToken*PStop=NULL;//栈顶指针10)//intPSnum=0;//栈元素个数11)voidPStackPush(LexToken*t)12){13)staticintsize=sizeof(PStackToken);14)PStackToken*p=(PStackToken*)malloc(size);//不检查合法性15)p->ptoken=t;

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

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

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