语法制导翻译和中间代码生成.pptx
属性文法01语法制导翻译02中间代码的生成03典型语句的翻译04第八章语法制导翻译和中间代码生成本章将介绍语义处理阶段的相关知识,主要内容包括:
8.0语义处理概述程序设计语言的语义静态语义是对程序约束的描述,因这些约束无法通过抽象语法规则来妥善地描述,从而引入该类语义。动态语义程序单元描述的计算或要执行的动作。
8.0语义处理概述语义处理的任务:动态语义处理生成中间/目标代码,对表达式的求值等。静态语义检查类型检查:验证程序中执行的每个操作是否遵守语言的类型系统。控制流检查:控制流语句必须使控制转移到合法的地方。例如C中break语句使控制跳离包括该语句的最小while、for或switch语句。如果不存在包括它的此类语句就报错。
一致性检查。在很多场合要求对象只能被定义一次。例如Pascal语言规定同一标识符在一个分程序中只能被说明一次,同一case语句的标号不能相同等。名字的作用域分析128.0语义处理概述静态语义检查(续)
语法制导翻译:在语法分析的同时,执行语义规则描述的动作:检查静态语义执行动态语义定义的动作属性文法:包含了一系列语义规则的上下文无关文法。语义处理的实现:8.0语义处理概述
属性文法是实际应用中比较流行的语义描述方法。属性文法概念基于属性文法的处理方法S-属性文法的自下而上计算L-属性文法及其翻译实现8.1属性文法
G:是一个上下文无关文法。V:有穷的属性集,与每个文法符号相联,代表该文法符号的类型、值、代码序列、符号表内容等相关信息。属性与变量一样,可以进行计算和传递。属性加工的过程就是语义处理的过程。F:关于属性的断言或一组属性的计算规则(语义规则)。断言或语义规则与一个产生式相联,引用该产生式左端或右端的终结符或非终结符相联的属性。属性文法(形式化定义):它是一个三元组:A=(G,V,F),其中8.1属性文法
8.1属性文法属性文法在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的值(称为属性)。与非终结符E的产生式相联的断言指明:两个T的属性必须相同E→T1+T2|T1orT2
T→num|true|false例:已知文法GE→T1+T2{T1.t=intANDT2.t=int}
E→T1orT2{T1.t=boolANDT2.t=bool}
T→num{T.t:=int}
T→true{T.t:=bool}
T→false{T.t:=bool}则完成文法G类型检查的属性文法为:
壹属性分为综合属性和继承属性。综合属性用于“自下而上”传递信息,而继承属性用于“自上而下”传递信息。贰属性文法中,对应于每个产生式A??都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2…ck),其中f是一个函数,b和c1,c2…ck是该产生式文法符号的属性。则综合(继承)属性的概念可定义为:8.1属性文法
如果b是A的一个属性,c1,c2…ck是产生式右部文法符号的属性或A的其它属性,则称b是A的综合属性如果b是产生式右部某个文法符号X的一个属性,并且c1,c2…ck是A或产生式右边任何文法符号的属性,则称b是X的继承属性以上两种情况都称属性b依赖于属性c1,c2…ck128.1属性文法
非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。01终结符只有综合属性,它们由词法程序提供。02语义规则所描述的工作包括:属性计算、静态语义检查、符号表操作、代码(中间)生成等。03小结:8.1属性文法
例.1:简单算术表达式求值的语义描述(综合属性的例子)非终结符E,T及F都有一个综合属性val,终结符号digit有一个综合属性。与产生式L→E对应的语义规则仅是打印由E产生的算术表达式的值,可认为这条规则定义了L的一个虚属性。语义规则LEEE1+TETTT1*FTFF(E)FdigitPrint(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val?F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval产生式
设表达式为3*5+4,则语义动作打印数值19Lval=19val=15val=4val=15val=4val=3val=3val=5digit.lexval=4digit.lexval=5digit.lexval=3+3*5+4的带注释的分析树
继承属性一个结点的继承属性值