- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于语法和语义:
语法是指语言的结构;语义是指附着于语言结构上的实际含意 ,即语言的“意义”。
语义不能离开语法独立存在;
语义远比语法复杂;
同一语言结构可包含多种含意,不同语言结构表示相同含意;
语法与语义之间没有明确的界线。
语义分析的两个作用:
检查是否结构正确的句子所表示的意思也合法;
执行规定的语义动作,如:表达式求值
符号表填写
中间代码生成等
语义分析的方法:
语法制导翻译;要对语法正确的源程序进行翻译:首先要进行语义检查(详见龙书第六章及补充材料) ,若正确,则翻译成中间代码或目标代码。
语义分析和中间代码生成使用的大多是语法制导翻译方法。其思想是,根据翻译的需要为每个文法符号设置属性,以表示文法符号的信息。例如,一个变量的属性有类型、值、存储地址等;表达式的属性有类型、值等。
属性值的计算和产生式相联系。随着语法分析的进行,属性值也同时进行计算和传递,完成语义分析和翻译的任务(语法制导)。;语法制导翻译的具体方法:;属性的抽象表示:文法符号.attr
例如:二义性表达式文法G(E):
E?E ‘+’ E | E ‘*’ E | ‘(‘ E ‘)’ | number
E.val(值)
E.type(类型)
E.code(代码序列)
E.place(存储空间)
对文法的约定:
以下的注意力主要在语义处理上,为了简单,本章的文法多为二义文法。默认解决二义性的方法是规定常规意义下的优先级和结合性。;属性文法(Attributed Grammar)
上下文无关文法+属性+属性计算规则
属性值根据计算的依赖关系分成两类:
综合属性(synthesized attribute)
继承属性(inherited attribute)。
在分析树中,一个结点的综合属性值是从其子结点的属性值计算出来的(自下而上);而一个结点的继承属性值是由该结点兄第结点和父结点的属性值计算出来的(自上而下) 。
属性加工过程就是语义处理过程。对于文法的每个产生式配备一组属性的计算规则,称之为语义规则。;在一个属性文法中,对应每个产生式A→?都有与之相关联的一套语义规则,每条规则形式为: b:= f(c1,c2,…,ck)
其中f是一个函数,而且
或者 1.b是A的一个综合属性并且c1,c2, …ck是?中的符号的属性,也可以是A的其它属性,
或者 2.b是?中的某个符号的一个继承属性并且c1,c2,…,ck是A或?中的任何文法符号的属性.
在两种情况下,都说属性b依赖于属性c1,…,ck, 这实质上反映了属性计算的先后次序,即所有属性ci被计算之后才能计算属性b。 ;A.b;特别强调:
(1)终结符只有综合属性,它们由词法分析器提供。
(2)非终结符既可以有综合属性,也可以有继承属性,文法开始符号的所有继承属性作为属性计算前的初始值。;通常:
对出现在产生式右边的继承属性和出现在产生式左边的综合属性都必须提供一个计算规则。且属性计算规则中只能用相应产生式中的文法符号的属性(利于封装)。
出现在产生式左边的继承属性和出现在产生式右边的综合属性不由所给产生式的属性计算规则进行计算,而由其它产生式的属性规则或由属性计算器的参数提供。
例:A?BC
A.a (A继) A.b (A综) B.c (B综) C.d (C继)
可能有 C.d:=B.c+1 A.b:=A.a+B.c
而A.a和B.c在其它地方计算。;表6.1 简单台式计算器的属性文法;属性依赖图: 3+4×5;属性值的设置与语法结构的语义以及翻译程序的需要有关。
例如,把表6.1中的类型扩充到 int和real,就出现了表6.2(Slide 11)中的类型属性 。;digit.lexval:=3;综合属性值的计算方法:
对于S-属性定义,通常使用自底向上的分析方法,在建立每一个结点处使用语义规则来计算综合属性值,即在 用哪个产生式进行归约后,就执行那个产生式的S-属性定义计算属性的值,从叶结点到根结点进行计算。 ; 表6.2 带有继承属性L.in的语法制导定义;T;6.2 基于属性文法的处理方法;实际上,编译中语义翻译的实现并不是按上图的流程处理的;而是随语法分析的进展,识别出一个语法结构,就对它的语义进行分析和翻译。;语义规则建立了属性之间的依赖关系,这些关系可以用图来表示,这样的图称为依赖图。;假设语法树已经建立了,并且树中已带有开始符号的继承属性和终结符的综合属性。然后用深度优先,从左到右
文档评论(0)