基本信息
文件名称:语法制导翻译.ppt
文件大小:3.97 MB
总页数:108 页
更新时间:2025-09-22
总字数:约1.5万字
文档摘要

类型转换如:产生式E?E(1)opE(2)的语义动作中关于E.MODE的规则可定义为:{IFE(1).MODE=intandE(2).MODE=intTHENE.MODE=intELSEE.MODE=r}需添加一各类型转换的四元式:(itr,A1,--,T)意味着把整型量A1转换成实型,结果存放在T中。此外,对于运算符应指出相应的类型。第62页,共108页,星期日,2025年,2月5日类型转换如:X:=Y+I*J,X,Y为实型,I,J为整型,则相应的四元式序列应为:(*i,I,J,T1)(itr,T1,--,T2)(+r,Y,T2,T3)(:=,T3,--,X)第63页,共108页,星期日,2025年,2月5日简单赋值语句的四元式翻译首先对id表示的单词定义一属性id.name,用做语义变量,用Lookup(id.name)表示审查id.name是否出现在符号表中,如在,则返回一指向该登录项的指针,否则返回nil。语义过程emit表示输出四元式到输出文件上。语义过程newtemp表示生成一临时变量,每调用一次,生成一新的临时变量。语义变量E.place,表示存放E值的变量名在符号表的登录项或一整数码产生式和语义描述:第64页,共108页,星期日,2025年,2月5日(1)S→id:=E{p:=lookup(id.name); ifp≠nilthen emit(p′:=′E.place) elseerror}(2)E→E1+E2{E.place:=newtemp;emit(E.place′:=′E1.place′+′E2.place)}(3)E→E1*E2{E.place:=newtemp;Emit(E.place′:=′E1.place′*′E2.place第65页,共108页,星期日,2025年,2月5日(4)E→—E1{E.place:=newtemp;Emit(E.place′:=′′uminus′E1.place)}(5)E?(E1){E.place:=E1.place}(6)E?id{P:=lookup(id.name)ifP?nilthenE.place:=Pelseerror}第66页,共108页,星期日,2025年,2月5日§5.5布尔表达式的翻译在程序设计语言中,布尔表达式的两个作用:做控制语句中的条件表达式;用于逻辑符值语句中布尔表达式演算。布尔表达式由布尔运算符作用于布尔变量(或常量)或关系表达式形成。布尔运算符有:∧(与)、∨(或)、┐(非)关系表达式为:E(1)ropE(2),其中rop为关系运算符,E(1)和E(2)为算术表达式。第67页,共108页,星期日,2025年,2月5日布尔表达式的翻译布尔表达式文法简化如下:E?E∧E|E∨E|┐E|(E)|i|EaropEb布尔表达式在逻辑演算中的翻译布尔表达式演算预算数表达式演算非常相似。在翻译为中间代码时,为每个产生式配上相应语义子程序。如:A∨B∧C=D第68页,共108页,星期日,2025年,2月5日控制语句中布尔式的翻译根据布尔表达式的特点,可以用if-then-else来解释布尔表达式,如:A∨B==ifAthentrueelseB;A∧B==ifAthenBelsefalse;┐A==ifAthenfalseelsetrue;出现在条件语句IfEthenS1elseS2中的布尔表达式E作用仅在于控制对S1和S2选择。第69页,共108页,星期日,2025年,2月5日控制语句中布尔式的翻译IfEthenS1elseS2转移条件E可以翻译成三种形式的四元式序列:(jnz,A1,_,p)(jθ,A1,A2,p)(j,_,_,p)E的代码序列S1的代码序列S2的代码序列条件语句的代码结构第70页,共108页,星期日,2025年,2月5日