- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理PL0编译程序的实现2(希赛教育基础学院).
2.4 PL/0编译程序的语法分析 PL/0编译程序语法、语义分析是整个编译程序设计与实现的核心部分,要求学员努力学习掌握实现技术和方法。现分别说明语法分析实现的主要思想方法和语义分析的实现。 语法分析的任务是识别由词法分析给出的单词符号序列在结构上是否符合给定的文法规则。PL/0语言的文法规则已在2.1节中给出。本节将以语法图描述的语法形式为依据,给出语法分析过程的直观思想。 PL/0编译程序的语法分析采用了自顶向下的递归子程序法。
什么是自顶向下的语法分析? 可形象地对该程序自顶向下构造一棵倒挂着的语法分析树,其构造方法是: (1) 由开始符号非终结符程序作为分析树的根结点,由非终结符程序规则的右部为子结点。 (2) 对分析树中的每个非终结符结点,选择它规则的一个右部为子结点构造分析树的下一层。 (3) 重复(2)直到分析树中的末端结点只有终结符。 (4) 若分析树中的末端结点从左到右连接的终结符号串刚好是输入的程序终结符号串,则说明所给程序在语法上是正确的。
可用下面简单的PL/0程序为例构造其语法分析树
粗略地说:自顶向下的递归子程序法就是对应每个非终结符语法单元,编一个独立的处理过程(或子程序)。语法分析从读入第一个单词开始由非终结符程序即开始符号出发,沿语法描述图箭头所指出的方向进行分析。当遇到非终结符时,则调用相应的处理过程,从语法描述图看也就进入了一个语法单元,再沿当前所进入的语法描述图的箭头方向进行分析,当遇到描述图中是终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,则执行相应的语义程序(就是翻译程序)。再读取下一个单词继续分析。遇到分支点时将当前的单词与分支点上的多个终结符逐个相比较,若都不匹配时,可能是进入下一非终结符语法单位或是出错。图 2.7 PL/0语法调用关系图 如果一个PL/0语言的单词序列在整个语法分析中,都能逐个得到匹配,直到程序结束符.,这时就说所输入的程序是正确的。对于正确的语法分析做相应的语义翻译,最终得出目标程序。以上所说语法分析过程非常直观粗浅,实际上应用递归子程序法构造语法分析程序时,对文法有一定的要求和限制,这个问题我们将在第5章详细讨论。 此外,从PL/0的语法描述图中可以清楚地看到,当对PL/0语言进行语法分析时,各个非终结符语法单元所对应的分析过程之间必须存在相互调用的关系。这种调用关系可用图2.7表示。也可称为PL/0语法的依赖图,在图中箭头所指向的程序单元表示存在调用关系,从图中不难看出这些子程序在语法分析时被直接或间接递归调用。 由图 2.7 PL/0语法调用关系图可以看出对分程序和语句为直接递归调用,对表达式为间接递归调用。 例:如何用递归子程序法实现表达式的语法分析现用2.1中给出的表达式语法图进行语法分析,语法图如下:
图 2.1(e) 表达式语法描述图
图 2.1(f) 项语法描述图
图 2.1(g) 因子语法描述图 表达式的EBNF 〈表达式〉=[+|-]〈项〉{(+|-)〈项〉} 〈项〉=〈因子〉{(*|/)〈因子〉} 〈因子〉=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’ 〈表达式〉的递归子程序实现
procedure expr; begin if sym in [ plus, minus ] then begin getsym; term; end else term; while sym in [plus, minus] do begin getsym; term; end end; 〈项〉的递归子程序实现
procedure term; begin factor; while sym in [ times, slash ] do begin getsym; factor; end end; 〈因子〉的递归子程序实现
procedure factor; begin if sym ident then begin if sym number then begin if sym = ‘(‘ then begin getsym; expr; if sym = ‘)’ then getsym else error end
您可能关注的文档
最近下载
- 【医学课件】 Pseudomonas aeruginosa biofilm formation.ppt VIP
- 瞿同祖中国法律与中国社会.ppt VIP
- 2025年山东省春季高考数学试卷试题真题(含答案解析).pdf VIP
- 2024-2025学年高一下学期《唤醒内驱力——开启自主学习成长之旅》主题班会课件.pptx VIP
- 低钾血症.ppt VIP
- 2025年《大数据营销》考试试卷及答案.pdf VIP
- 江苏省无锡市锡山区天一实验学校2023-2024学年七年级上学期期中数学试题.doc VIP
- 智能交通信息采集技术12_浮动车课件讲解.pptx VIP
- 智学网官网登录入口.docx VIP
- 常用房屋体检设备清单及技术参数、软件要求、数据资产、屋体检报告、评价判定表.pdf VIP
原创力文档


文档评论(0)