ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【编译原理】语法分析总结

2022-01-01 16:05:28  阅读:176  来源: 互联网

标签:总结 算符 文法 语法分析 G2 分析 分析法 编译 id


文章目录

一、语法分析思维导图

在这里插入图片描述

二、语法分析总结与讨论

文法1 G1(E): E→E+E | EE | (E) | id
文法2 G2(E):
E→E+T|T
T→T
F|F
F→(E)|id

研讨问题一:(自顶向下分析法)

(1)对于文法G1(E)能否采用确定的自顶向下分析法LL(1)进行分析?

答:因为文法G1(E)有左递归,所以文法G1(E)不能采用确定的自顶向下分析法LL(1)进行分析。

(2)对于文法G2(E)能否采用确定的自顶向下分析法LL(1)进行分析?

答:因为文法G2(E)有左递归,所以文法G2(E)不能采用确定的自顶向下分析法LL(1)进行分析。

(3)对于文法G2(E)经过改写后能否采用确定的自顶向下分析法LL(1)进行分析?若能,请构造预测分析表,并对字符串id+id*id#进行分析。

答:消除左递归后的文法为:
E→TE’
E’→+TE’|ε
T→FT’
T’→*FT’|ε
F→(E)|id
则文法 G2 的FIRST集合与FOLLOW集合为
FIRST(E) = { (,id }    FOLLOW(E) = { #,) }
FIRST(E’) = { +,ε }    FOLLOW(E’) = { #,) }
FIRST(T) = { (,id }    FOLLOW(T) = { +,#,) }
FIRST(T’) = { *,ε }   FOLLOW(T’) = { +,#,) }
FIRST(F) = { (,id }   FOLLOW(F) = { *,+,#,) }
预测分析表入下:
在这里插入图片描述
分析过程如下:
在这里插入图片描述
在这里插入图片描述

研讨问题二:(自下而上的分析法——算法优先分析法)

(1)对于文法G1(E)是否是算符文法?能否应用算符优先分析法进行分析?

答:算符文法的定义为:一个文法,若果它的任意产生式的右部都不包含两个相继(并列)的非终结符,则称为算符文法。
因为该文法的任一规则右部都不包含两个相邻的非终结符,所以该文法是算符文法。
算符优先文法的定义:如果一个算符文法G中的任何终结符对(a,b)至多只满足a=b、a<b、a>b这三个关系之一,则称G是一个算符优先文法。
因为 该文法+和*之间存在两种不同的优先关系,所以该文法不是算符优先文法。

(2)对于文法G2(E)能否采用算法优先分析法进行分析?若能,请构造算符优先分析表,并对字符串id+id*id#进行分析

答:G2(E)能采用算符优先分析法进行分析,分析过程如下:
计算得到每个非终结符的FIRSTVT和LASTVT:
在这里插入图片描述

构造G2(E)的算符优先关系表:
在这里插入图片描述

对输入串id+id*id#的分析过程如下:
在这里插入图片描述

研讨问题三:(自下而上的分析法——LR分析法)

(1)对于文法G2(E)能否采用LR(0)、SLR(1)、LR(1)分析法进行分析?若能,请构造相应的分析表,并对字符串id+id*id#进行分析。

答:文法G2(E)的拓广文法为:
0. E’→E
1. E→E+T
2. E→T
3. T→T*F
4. T→F
5. F→(E)
6. F→id
在这里插入图片描述

因为I1,I2,I9项目有移进归约冲突,所以不是LR(0)文法,不能用LR(0)分析法进
FOLLOW(E’)={ $ } ∩ { + }=∅FOLLOW(E)={+,),$ } ∩ { * }=∅所以,可以用SLR(1)方法解决。

SLR(1)分析表入下:
在这里插入图片描述

输入串id+id*id#的分析过程如下:
在这里插入图片描述
在这里插入图片描述

LR(1)项目集如下:
在这里插入图片描述

LR(1)分析表入下:
在这里插入图片描述
在这里插入图片描述

输入串id+id*id#的分析过程如下:
在这里插入图片描述

(2)对于文法G1(E),能否加入某些限制条件,构造LR分析表?这样做,有什么好处?

答:G1(E)文法的LR(0)DFA如图所示:
在这里插入图片描述

可以规定‘*’的优先级高于‘+’的优先级,且它们都服从左结合。
构造的二义性文法分析表如图所示:
在这里插入图片描述

这样构造LR分析表的优点是可以分析二义性文法,减少项目集的数量,提高分析效率。

标签:总结,算符,文法,语法分析,G2,分析,分析法,编译,id
来源: https://blog.csdn.net/qq_50533078/article/details/122268032

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有