网站大量收购独家精品文档,联系QQ:2885784924

第07章 面向法的语义描述.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第07章 面向法的语义描述

第07章 动作文法和属性文法 语义处理的抽象描述。 作用:自动实现语法和语义检查 分类: 动作文法 属性文法 7.1 动作文法 动作文法的相关内容 动作符(Action Symbol) 动作文法(Action Grammer) 尾动作文法 抽象动作文法 动作文法的实现方法 动作文法的LL实现 动作文法的LR实现 7.1.1 动作文法定义 动作符: (区别于语法符号) 作用:用来指明某种语义动作。 形式:#Name //Name是语义子程序名,无参 位置:产生式右部的任意位置 动作文法:产生式的右部带动作符的文法。 作用:描述语义动作。 核心文法:动作文法中删除所有动作符后所组成 的文法。 动作文法的应用:可用来描述语义分析器,并可 实现语义分析器的自动生成。 动作文法的例子 例2:串中出现连续b的个数。 L ? B B B ? a B B ? b B B ? c 尾动作文法 定义:动作符只出现于产生式的末尾。 特点:实现容易,LL方法和LR方法都可以。 7.1.2 动作文法的递归实现 如果给定一个动作文法,而且其核心文法是递归下降文法,则可以机械地构造出相应的、带语义动作的递归下降分析程序。 语法分析程序和语义分析程序: *7.1.3 动作文法的LL实现 LL动作文法:满足LL(1)文法条件的动作文法。 语义处理器的组成:LL(1)分析表,驱动器,动作子程序。 驱动器的功能:在进行语法分析的同时,在指定位置上调用语义动作子程序。 LL驱动器的分类: 1)不带语义栈控制:由用户实现语义栈的管理,即将语义栈的处理写在语义子程序中。 2)带语义栈控制:由驱动器来控制语义栈。 1)不带语义栈控制的LL驱动器 算法要点: [1] 初始化: Stack :=empty;Push(Z); [2] 读下一个输入符: Read(a); [3] 若当前格局是(empty,empty),则成功结束; 否则,转下; [4] 设当前格局为(X....., a.....),则 ?若 X?VT X=a 则{Pop(1);sem:=a.Val; goto [2]} ?若 X?VT X?a 则 Error; ?若 X?VN,则: if T(X,a)=X→Y1Y2Yn then {Pop(1);Push(Yn ,.....,Y1);goto[3]} else Error ?若X是动作符,则 {Pop(1);执行子程序X;goto [3]} 2)带语义栈控制的LL驱动器 语义栈指针(LRCT)的含义: LeftIndex:指向当前产生式左部符号的语义栈地址 RightIndex:指向当前产生式右部的语义栈基地址 CurrentIndex:指向当前符号的语义栈地址 TopIndex:指向当前第一自由地址 例:分析E?E+P中的P时的情况如下图。 7.1.4 动作文法的LR实现 LR(1)尾动作文法:如果给定动作文法的核心文法满足LR(1)条件,则称其为LR(1) 动作文法。 分析算法:由语法栈和语义栈组成,算法如下: 移入时:输入符压入语法栈中,输入符的语义 信息压入语义栈中; 归约时:执行语义动作,语法栈和语义栈同时 退N个,将产生式左部压入语法栈, 语义信息压入语义栈中。 LR的驱动程序 1:StatStack[0]:=S0 ;SynStack[0]:=?; SemStack[0]:=?;top:=1; 2:Scaner(lex,val);//读输入符的语法和语义信息 3:S := StateStack[top]; 4:case Action[ S, lex] of ? Error ? ErrorProcess; ? Accept ? Finish; ? Shift k ? {top:=top+1; StatStack[top]:=Sk; SynStack[top]:=lex; SemStack[top]:=val; goto 2 } ? Reduce p? {ActionRoutine(p); top:

文档评论(0)

woai118doc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档