- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于VC++的LL(1)语法分析器设计与实现
作者姓名:晏丽智 指导老师:王一宾
摘要:语法分析是编译过程的核心部分,可以粗略的分为自上而下分析法和自下而上分析法。LL(1)文法是一类可以进行确定的自上而下语法分析的文法。本文首先阐述了LL(1)文法的基本理论,然后着重讨论了LL(1)语法分析器的设计,最后用VC++实现了LL(1)语法分析器。
关键词:LL(1)文法,FIRST集,FOLLOW集,预测分析表
0引言
语法分析是编译过程的核心部分,它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。LL(1)文法是一类可以进行确定的自上而下语法分析的文法。本文讨论了LL(1)语法分析器的工作原理和过程,重点说明了FIRST集、FOLLOW集以及预测分析表的构造。
1 LL(1)语法分析器的基本理论
1.1 理论基础
语法分析是编译过程的核心部分,它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。 语法分析器工作本质:按文法的产生式,识别输入符号串是否为一个句子,判断是否能从文法的开始符号出发推导出这个输入串。LL(1)文法是一类可以进行确定的自上而下语法分析的文法。自上而下分析方法的基本思想是从文法的开始符号出发,向下推导,推出句子;即对任何输入串,试图用一切可能的办法,从文法开始符号出发,自上而下地为输入串建立一棵语法树[1]。实现这种自上而下分析法存在许多困难,首先是递归问题,一个文法是含有左递归的,如果存在非终结符P,有P Pa,则含有左递归的文法将使上述的自上而下的分析过程陷入无限循环。因此,使用自上而下分析法必须消除文法的左递归。其次是回溯问题。由于回溯造成的匹配虚假现象,把已经做的一大堆语义工作推倒重来。这些事情既麻烦又费时间,所以,最好应设法消除回溯。
1.2 左递归的消除
直接消除见诸于产生式中的左递归是比较容易的。假定关于非终结符P的规则为?P →Pα|?
其中,?不以P开头。那么我们可以把P的规则改写为如下的非直接左递归形式:
P→?P’
P’→ αP’| ε(ε为空字)
这种形式和原来的形式是等价的,也就是说,从P推出的符号串是相同的。
一般而言,假定关于P的全部产生式是
P→Pα1|Pα2|…|Pαm|β1|β2|…βn
其中α都不等于ε ,且每个β不以P开头。
则改写后为 P →β1P′|β2P′|…|βnP′
P′→ α1P′|α2P′|…|αmP′| ε
使用这个方法,我们容易把见诸于表面的所有直接左递归都消除掉,也就是说,把直接左递归都改成直接右递归。对于间接左递归的消除可以采用代人法把间接左递归变成直接左递归[2]。
下面给出消除左递归的算法:
如果一个文法不含回路,也不含以ε为右部的产生式。
(1) 排序
把文法G的所有非终结符按任一种顺序排列P1、P2、…、P n按序执行。
(2) 代入及消除左递归
for(i=1; i=n; i++)
for(j=1; j =i-1;j++)
把形如 Pi → Pjγ的规则改写为
Pi →δ1 γ | δ 2 γ | …| δ k γ
(其中Pj → δ 1| δ 2|…| δ k 是关于Pj的所有规则)
消除关于Pi规则的直接左递归性
(3) 化简
化简由(2)所得文法,即去除那些从开始符号出发永远无法到达的非终结符的产生式规则。
1.3 消除回溯、提左因子
为了消除回溯就必须保证:对文法的任何非终结符,当要它去匹配输入串时,能够根据它所面临的输入符号准确地指派它的一个候选去执行任务,并且次候选的工作结果是确信无疑的。也就是说,若此候选获得成功匹配,那么,这种匹配不会是虚假的;若此候选无法完成任务,则任何其它候选也肯定也无法完成任务。换句话说,假定现在轮到非终结符A去执行匹配任务,A共有n个候选α1,α2,……αn,即A→α1|α2|……αn。A能够根据不同的输入符号指派相应的αi作为全权代表去执行任务,那就肯定无需回溯了。在这里A已不再是让某个候选去试探地执行任务,而是根据所面临的输入符号α准确地指派唯一的一个候选。其次,被指派候选的工作成败也完全代表了A[3]。
假定关于A的规则是A→δβ1|δβ2|……|δβn|γ1|γ2|……|γm (其中γi不以δ开头) ,提取公共左因子,改写为
A→δA′|γ1|γ2|……|γm
A′→β1|β2|……|βn
2 LL(1)语法分析器的设计
首先判别一个文法是否是LL(1)文法,如果不是LL(1)文法则需要转化为LL(1)文法。要判
您可能关注的文档
- 浅谈地理信息获取和解读的基本途径.doc
- “十二五”时期民营企业自主创新对策浅析.doc
- 大学生旅游行为特征及对策.doc
- “阳光体育运动”的影响因素及对策.doc
- 构建课堂教学模式推动学校课程改.doc
- 《银行人力资源管理》文献综述.doc
- 1信息检索基础知识化工.doc
- 2011CB933300G基于纳米结构的新型柔性纤维基可编织光.doc
- 浅谈小学生道德养成教育.doc
- 浅谈小学数学中的美育.doc
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].docx
- 情绪价值系列报告:春节消费抢先看-国证国际证券.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(解析版).docx
- 2020版 沪科技版 高中生物学 必修2 遗传与进化《第4章 生物的进化》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].pdf
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第1章 人体的内环境和稳态》大单元整体教学设计[2020课标].docx
- 液冷盲插快接头发展研究报告-全球计算联盟.docx
- 精品解析:北京市东直门中学2023-2024学年高二下学期3月阶段性考试(选考)物理试题(原卷版).docx
- 精品解析:北京市东直门中学2024届高三考前练习数学试卷(解析版).docx
- 2020版 沪科技版 高中生物学 选择性必修1 稳态与调节《第2章 人体的神经调节》大单元整体教学设计[2020课标].docx
文档评论(0)