- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于LR(1)的语法分析程序
1.设计目的:
设计、编制和调试一个典型的LR(1)分析器,进一步掌握LR(1)语法分析方法,掌握用预测分析方法分析LR(1)文法的具体过程,加深对LR(1)文法和预测分析方法的理解。
2.设计要求:
根据LR(1)分析法编写一个语法分析程序,.输入已给定文
法,直接输入根据己知文法构造的LR(1)分析表。
对于输入的符号串,所编制的语法分析程序应能正确判断此串是否为文法的句子,并要求输出分析过程。
3.设计过程:
3.1 LR(1)文法的含义:
LR分析法的规约过程是规范推倒的逆过程,所以LR分析过程是一种规范规约的逆过程,L表示从左到右扫描输入R表示最左规约(即最右推导的逆过程→a.Bβ,a]属于CLOSURE(I),B→ξ是一个产生式,那么,对于FIRSTβa中的每一个中介符b,如果[β→.ξ,b]原来不在CLOSURE(I)中,则把它加进去;
(3)重复执行步骤(2),直到CLOSURE(I)不再增大为止。2.GO(I,X)的构造
GO(I,X)=CLOSURE(J)
其中J={任何形如[A→aX.Β,a]的项目[A→a.X.Β,a]属于I}
3.FIRST集合的构造
在这个程序中使用的是FIRST(βa),这基于每一个非终结符的FRIST集合(终结符的FIRST就是它本身)。所以需要对每一个非终结符构造其FIRST集合。
方法如下:
连续使用下面的规则,直到每个集合FIRST不再增大为止。
若X属于VT,则FIRST(X)={X}。
(2)若X属于VN,且有产生式X→a…,则把A加入到FIRST(X)中;若X→ξ也是一条产生式,则把ξ也加入到FIRST中。
4.LR(1)分析表的构造
在实现GO(I,X)时,记录下状态的转化。得到分析表中的移进部分。然后再扫描所有的项目集,找到其中包含归约项目的哪些项目集,根据其中项目,得到分析表中那些鬼月的部分。
4 设计内容
4.1 主要变量说明:
#define SIZE 20 //宏定义,定义sSIZE为12
#define sSIZE 12 //宏定义,定义sSIZE为12
#define aSIZE 6 //宏定义,定义aSIZE为6
#define gSIZE 2 //宏定义,定义gSIZE为2
#define geSIZE 6 //宏定义,定义geSIZE为6
typedef struct Ge
{
char head; //文法规则左部
char gen[5]; //文法规则右部
}Generate;//生成符号串的基本数据结构体
typedef struct A
{
int st[aSIZE]; //遇到终结符时下一个动作状态
int re[aSIZE]; //遇到非终结符时进行规约
}Action;//动作表的基本数据结构体
typedef struct G
{
char head[gSIZE]; //状态转换时遇到的非终结符
int gt[gSIZE]; //标记下一个状态
}GOTO;//GOTO表的基本数据结构体
int status[SIZE]; //状态栈
int sta_Index; //状态栈栈顶标记
char symbol[SIZE]; //符号栈
int sym_Index; //当前符号栈的标记
char expression[SIZE]; //输入的符号串
int exp_Index; //输入符号串的标记
int exp_top; //输入符号串的栈顶元素
int step; //计算步骤
int IsAccept = 0; //初始化接受状态标志置为0
Generate gene[geSIZE +1];
Action act[sSIZE];
GOTO go[sSIZE];
4.2 程序流程图:
N
Y
4.3运行结果:
运行后进入界面:
上图是编译运行后进入的主界面,给出了给定文法、分析表,要求出入一个要进行分析的符号串。
输入错误字符串beD:
上图中含有非终结符,不符合要输入指定的几个非终结符的要求,所以提示错误。
输入字符串aed:
上图输入的符号串符合要求,可见结果为接受状态,
您可能关注的文档
最近下载
- 中国特色社会主义为什么“好”图文党课.pptx VIP
- 材料研究与测试方法试卷.doc VIP
- CAAC执照理论考试.pptx
- 教科版二年级上第一单元《我们的地球家园》大单元整体教学设计.pdf VIP
- 81、4-6岁 《小雏菊》少儿美术课件.pptx
- 弘扬教育家精神以教育家精神引领教师队伍高质量发展课件PPT.pptx VIP
- canopen一致性测试广州虹科电子科技.pdf
- 部级基础教育精品课PPT模板.pptx VIP
- 1《中国人民站起来了》课件(29张PPT) 高中语文统编版选择性必修上册第一单元 .pptx
- 高中-历史-部编版(2019)-第20课 北洋军阀统治时期的政治、经济与文化.ppt
文档评论(0)