- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
词法与语法
4
4
语法分析和语法分析程序
4.1 重点和难点
4.1.1 语法分析程序的功能
语法分析程序又简称称为分析器,它以单词串形式的源程序作为输入或分析的对象,其基本任务是:根据程序设计语言的语法规则(即定义该语言的前后文无关文法),分析源程序的语法结构,即分析如何由这些单词组成该源程序的各种语法成分(如下标变量、函数、各种表达式、各程语句等等),并在分析过程中进行语法正确性检查,产生内部形式的中间代码,供编译程序后续阶段处理。
目前,已存在许多语法分析方面的方法,但就产生语法树的方向而言,可大致把它们分为自顶向下分析和自底向上分析两大类。
4.1.2 自顶向下的语法分析
所谓自顶向下的语法分析,是指对于给定输入串w,试图为其构造一个从文法开始符号到w的最左推导,或为w自上而下地构造一棵以S为根结点的语法树。如果这一尝试得到成功,则证明w是相应文法的一个句子;反之,则不是。
在进行自顶向下的语法分析时,通常有下列两个障碍须加以解决:
(1)由于采取了最左推导,故当相应方法法G中含有左递归的非终结符号时,便会使语法分析过程陷入循环不已的状况。
(2)采用最左推导以实现对符号串w的匹配,实际上是一个用文法产生式的诸候选式反复进行试探的过程,这势必会出现大量的回溯,从而导致语法分析效率的大幅度下降。
因此,欲实现自顶向下的语法分析,其首要任务是改造程序设计语言的文法,以消除其中的左递归和避免回溯的出现。
1.消除文法的左递归
如果一个文法G[S]=(VN,VT,P,S)中的A-产生式具有如下的形式:
A→Aα1|Aα2|…|Aαn|β1|β2|…|βm
其中每个βi均不以A打头,则A是一个直接左递归的非终结符号。为消除此种左递归,可引入一个新的非终结符号A’,并将上述A-产生式改写为
A→β1A’|β2A’|…|βmA
A’→α1 A’|α2 A’|…|αn A
即可。如果一个非终结符号A是经多步推导而出现的左递归,则可对相关产生式作代入操作,将A-产生式化成直接左递归的,再按上面的方法将左递归消除。下面,再给出一种通过将文法G=(VN,VT,P,S)表示成矩阵形式而一次消除G的全部左递归的方法。
首先,令VN={X1,X2,…,Xn},且对G的每个产生式
Xi→γ1|γ2|…|γm (i=1,2,…,n)
可将其写成
Xi=X1α1i+X2α2i+…+Xnαni+βi (i=1,2,…,n)
其中:“=”和“+”分别代表原产生式中的“→”和“|”;若原产生式中不含以Xj开头的候选式,则相应的αji=φ;βi是原产生式中以终结符号开头的诸候选式之“和”。于是,文法G的诸产生式便可写成如下的矩阵方程
或
X=AB+B
此方程有形如X=BA*的最小解,由于A*=I+AA*,若令
A*=Z=
则有
X=BZ
Z=I+AZ
其中
将上述两矩阵式写成分量式,便得到一组新的产生式,设它们所构成的文法为G’,则有L(G’)=L(G)。另外,由于向量B的各元素的每一项均是以终结符号打头的符号串,故矩阵式X=BZ相应的各产生式不含左递归的非终结符号;与矩阵式Z=I+AZ相应的各产生式显然也不是左递归的。也就是说,通过两述两矩阵式,我们已消除了原文法G的一切左递归。
2.消除回溯
对于给定的文法G[S]=(VN,VT,P,S)和给定的输入符号串w=a1a2…an(ai∈VT),为判断w是否为L(G)中的句子,现试图为w建立一个从S出发的最左推导,设经过若干步推导后,得到
A∈VN β∈(VN∪VT)*
其中w1=a1a2…ai-1,即w的一个前缀w1已从上面的推导得到匹配,现需对Aβ继续进行推导,以期使余下的输入串aiai+1…an也获得匹配。此时应使用A-产生式进行推导,现设G中的全部A-产生式为
A→γ1|γ2|…|γm
且对这m个候选式γk(1≤k≤m),要么全部γkβ均不能推出以ai打头的符号串(此时wL(G)),要么若存在一个γj,能使γjβ推导出以ai打头的符号串,而其余的γkβ
(1≤k≤m,k≠j)则不能推出,这样,上述推导过程在产生式选择上的试探将可避免。如果文法G中的全部产生式均满足上述要求,则消除回溯的问题自然就解决了。
可见,要实现无回溯的自顶向下语法分析,对相应文法须有一定的要求。为导出文法应满足的条件,需定义候选式γ的终结首符集和非终结符号A的后继终结符号集如下:
FIRST(γ)={a|γaδ,且a∈VT,δ∈V*}
FOLLOW(A)={a|S#αΑαδ,且a∈VT∪{#};α,βδ∈V*}
于是,对于一个已化简的非左递归文法G,在进行自顶向下语法分析时,不出现回溯的必要充分条件是,对于G中的每个产生式A→γ1|γ2|…|γm,其各候选式均应满足:
(1)不同的候选式不能推出以同一终结符号打头的符
您可能关注的文档
最近下载
- 光伏电站运行常见故障及技术解决方案.pdf VIP
- 军队文职考试《公共科目》试题与参考答案(2024年).docx VIP
- 生成式AI在小学英语课堂中的应用:教师教学决策优化研究教学研究课题报告.docx
- 初二物理导学案-全一册.pdf VIP
- 邮政企业快递企业安全生产重大事故隐患判定标准解读.pdf VIP
- 人民大2023学术规范和论文写作PPT第2章 选:论文选题与研究设计.pptx VIP
- 2025年中国食品级碳酸氢钠数据监测报告.docx
- 能源与动力工程研究教授——程林同志事迹材料— .doc VIP
- 高中物理竞赛-话题5:多质点在动态多边形顶点的相遇问题和多解问题.doc VIP
- 《提升基层干部管理能力》课件.ppt VIP
文档评论(0)