四元式生成中间代码C语言程序,编译原理--03 语法制导翻译和中间代码生成复习(清华大学出版社第3版)...

前言

第7章 语法制导的语义计算

语义分析是上下文有关的,目前较为常见的是用属性文法来描述程序语言语义,并采用语法制导翻译的方法完成对语法成分的翻译工作。

属性文法

属性 描述文法符号的类型、值等有关的一些信息,它可以被计算或传递。

语义动作 指产生式相关联的指定操作

条件谓词 指产生式关联的接受条件,或者根据该条件谓词决定做什么语义动作

语义规则集 通常是产生式关联的一组语义规则,每个语义规则可以是一个语义动作或条件谓词。

属性$att$可以与某个文法符号$a$关联,用$a.att$来表示这种关联

现有一文法: $E\rightarrow T_1 + T_2\mid T_1 && T_2$ $T\rightarrow num\mid true\mid false$

将上面的文法描述为类型检查的属性文法: $E\rightarrow T_1 + T_2 \quad {T_1.type=int\quad&&\quad T_2.type=int}$ $E\rightarrow T_1 && T_2\quad{T_1.type=bool\quad&&\quad T_2.type=bool}$ $T\rightarrow num\quad{T.type=int}$ $T\rightarrow true\quad{T.type=bool}$ $T\rightarrow false\quad{T.type=bool}$

综合属性和继承属性

对关联于产生式$A\rightarrow \alpha$的语义动作$b:=f(c_1, c_2, ..., c_k)$,如果$b$是A的某个属性,则b是A的一个综合属性。综合属性是自底向上传递信息。

对关联于产生式$A\rightarrow \alpha$的语义动作$b:=f(c_1, c_2, ..., c_k)$,如果$b$是产生式右边某个文法符号X的某个属性,则b是A的一个继承属性。继承属性是自顶向下传递信息。

带标注语法分析树,即在语法树的基础上,将原来的非终结符结点修改为综合属性的赋值。

下面是一个简单表达式文法G[S]的一个仅含综合属性的属性文法(开始符号为S) $S\rightarrow E\quad{print(E.val)}$ $E\rightarrow E_1+T\quad{E.val:=E_1.val+T.val}$ $E\rightarrow T\quad{E.val:=T.val}$ $T\rightarrow T_1*F\quad{T.val:=T_1.val\times F.val}$ $T\rightarrow F\quad{T.val:=F.val}$ $F\rightarrow (E)\quad{F.val:=E.val}$ $F\rightarrow d\quad{F.val:=d.lexval}$

其中$d.lexval$表示数值,$E.val, T.val, F.val$都为综合属性 现在要给表达式$3*(5+4)$构造语法树和带标注语法分析树:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值