7.2属性文法和语法制导翻译程序设计语言的语义静态语义是对程序约束的描述,这些约束无法通过抽象语法规则来妥善地描述,实质上就是语法规则的良形式条件,它可以分为类型规则和作用域/可见性规则两大类如:类型相容性变量先声明后引用名称相关要求动态语义程序单位描述的计算编译程序的语义处理工作静态语义审查执行动态语义(计算)生成代码...语法分析后的源程序语义处理语义形式化语义建模形式语义学(如指称语义学、公理语义学、操作语义学等)的研究已取得了许多重大的进展•文法模型----属性文法•命令式或操作式模型-----操作语义学•应用式模型-----指称语义学•公理式模型-----公理语义学属性文法和语法制导翻译在实际应用中比较流行的语义描述和语义处理的方法1属性文法概述2基于属性文法的处理方法3S-属性文法的自下而上计算4L-属性文法L-属性文法和自顶向下翻译自下而上的分析中实现L-属性文法7.2.1属性文法概述表达式文法E—>T+T|TorTT—>n|bET1+T2{T1.type=intT2.type=T1.typeE.type:=int}ET1orT2{T1.type=boolT2.type=T1.typeE.type:=bool}Tn{T.type:=int}Tb{T.type:=bool}input:/*emptystring*/|inputline;line:'\n'|exp'\n'{printf("\t%.10g\n",$1);}|error‘\n’;exp:NUM{$$=$1;}|exp'+'exp{$$=$1+$3;}|exp'-'exp{$$=$1-$3;}|exp'*'exp{$$=$1*$3;}|exp'/'exp{$$=$1/$3;}|'-'exp%precNEG{$$=-$2;}|exp'^'exp{$$=pow($1,$3);}|'('exp')'{$$=$2;};属性文法属性文法(attributegrammar)是一个三元组:A=(G,V,F),其中G:是一个上下文无关文法V:有穷的属性集,每个属性与文法的一个终结符或非终结符相连,这些属性代表与文法符号相关信息,如它的类型、值、代码序列、符号表内容等等.属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。F:关于属性的属性断言或一组属性的计算规则(称为语义规则).断言或语义规则与一个产生式相联,引用该产生式左端或右端的终结符或非终结符相联的属性.属性通常分为两类:综合属性和继承属性。简单地说,综合属性用于“自下而上”传递信息,而继承属性用于“自上而下”传递信息。属性文法中,对应于每个产生式A都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2…ck)f是一个函数,b和c1,c2…ck是该产生式文法符号的属性.并且(1)如果b是A的一个属性,c1,c2…ck是产生式右部文法符号的属性或A的其他属性,则称b是A的综合属性(2)如果b是产生式右部某个文法符号X的...