语法制导翻译与中间代码生成.pptVIP

  • 21
  • 0
  • 约6.02千字
  • 约 87页
  • 2017-04-21 发布于湖北
  • 举报
语法制导翻译与中间代码生成

语法制导翻译与中间代码生成;8.1 属性文法;静态语义审查 (1)类型检查。根据类型相容性要求,验证程序中执行的每个操作是否遵守语言的类型系统的过程,编译程序必须报告不符合类型系统的信息。 (2)控制流检查。控制流语句必须使控制转移到合法的地方。例如,在C语言中break语句使控制跳离包括该语句的最小while、for或switch语句。如果不存在包括它的这样的语句,则就报错。; (3)一致性检查。在很多场合要求对象只能被定义一次。例如Pascal语言规定同一标识符在一个分程序中只能被说明一次,同一case语句的标号不能相同,枚举类型的元素不能重复出现等等。 (4)上下文相关性检查。比如,变量名字必须先声明后引用; (5)名字的作用域分析 解释执行动态语义 (计算)生成代码(中间代码或目标代码) ;例:有文法G[E]: E → T1+T2 | T1 or T2 T → num|true|false 对输入串 2+6 语法树如图:;类型检查的属性文法: E → T1+T2 {T1.t=int AND T2.t=int} E → T1 or T2 {T1.t=bool AND T2.t=bool} T → num {T.t:=int} T → true {T.t:=bool} T → false {T.t:=bool};属性文法,语法制导翻译;例如:定义表达式的文法如下: E?E+E E?(E) E?n 给出定义表达式值的属性文法。; 属性文法:允许为每个终结符和非终结符配备一些属性的文法.它既能描述程序设计语言的语法,又为其语义描述提供了手段.;属性分为两种:继承属性和综合属性. inherited and synthesized(derived)attribute 继承属性的计算规则由顶向下, 综合属性的计算规则由底向上.; ;3*5+4的带注释的分析树;继承属性; ; 8.2 语法制导概论; 基于属性文法的处理过程即语法制导翻译是这样的: 对符号串进行语法分析,构造语法树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点按语义规则进行计算。; 8.2.2 S-属性文法和自下而上翻译 一般的属性文法的翻译器很难建立,然而L-属性文法的翻译器很容易建立。;8.3 中间代码的形式;翻译方法可分为; 在产生语法制导翻译程序时,完全根据文法的产生式来生成的,有时为???达到语法制导的目的,不得不对现有产生式做一些修改,这也是语法制导方法的特点。;中间代码;中间代码的层次;不同层次的中间代码举例;8.3.1 逆波兰式; POS(E)=POS(E1)||POS(T)||? 其中“||”表示串的“捻接”。;例子: pos(A+B*C)=pos(A)||pos(B*C)||+=ABC*+ pos(A*B+c)=pos(A*B)||pos(C)||+=AB*C+ ; 逆波兰式的优点:转换为逆波兰式的语言中间形式后,容易实现中间代码的翻译或目标指令。 ;.;a*(b+c/d)#;*(b+c/d)#;(b+c/d)#;b+c/d)#;+c/d)#;c/d)#;/d)#;d)#;)#;)#;)#;#;#;.;动画演示;8.3.2 表达式的三元式和树;例子: a:=b*c+b*d的相应三元组;tri(A*B+C/D)= 1:(*, A, B) A*B 2:(/, C, D) C/D 3:(+,①,②) A*B+C/D;5:(≥, X, 0) X≥0 6:(∨,⑤, B) X≥0∨B 7:(∧,⑥, D) (X≥0∨B)∧D 8:(∨,④,⑦);例: (a+b*(c-d))-e/f的树。;c;8.3.3 四元式; 1)(*,b,c,T1) b*c 2)(*,b, d,T2)b*d 3)(+,T1,T2,T3)b*c+b*d 4)(:=,T3,-,a) 下面是表达式四元式的形式定义。 ;FOUR(T) (+,RES(E1),RES(T),TEMP) RES(E)=TEMP(临时变量);FOUR(E) RES(F)=RES(E) ; 引进一过程GENQT: GENQT(ω):BEGIN RESULT:=NEWTEMP; QT[J]:=(ω,SEM[S-2],SEM[S-1],RESULT); SEM[S-2]:=RESULT;

文档评论(0)

1亿VIP精品文档

相关文档