语法制导定义 SDD

        语法制导定义SDD是对于 上下文无关语法CFG 的一个推广:

  • 将每个产生式和一组语义规则相关联,用来计算该文法产生式中每个文法符号的属性值。
  • 将每个文法符号和一个语义属性集合相关联。

        也就是说,SDD为CFG的每个文法符号设置了一个语义属性,对于给定的输入串x,SDD可以分析出语法分析树中每一个节点的属性值。

        问法符号的属性包括:综合属性和继承属性。

        所谓综合属性,指的是:分析数节点N上的非终结符A的综合属性只能通过N的子节点或者N本身的属性决定。

          

        比如说这里面的产生式E -> E1 +T. 对于这个产生式的语法分析树我们看出来,这里面E的val属性值只由他的子节点E1和T的属性值val决定。所以E的val就是一个综合属性。

        所谓继承属性,指的是N上的非终结符A的继承属性只能由N的父节点,N的兄弟节点和N本身的属性决定。

                                 

        比如上面的例子中,在产生式的语法分析树中我们能够看出,L的inh属性是由T的type属性决定的,而T是L的兄弟节点,所以这个是继承属性。

        我举一个例子:

        上图中表示每一个产生式对应的语义规则,可以看出这是一个加法和乘法的语义规则。通过上面的sdd就可以根据语义规则来计算语法分析树上各个节点的属性值了,以算术表达式求值 3*5+4n为例:

                                              

从上面语法分析树中的最下面的叶节点可以看出,数字的值lexval分别是3,5和4,那么一步一步向上,由语义规则中的F.val = digit.lexval可知,每个因子的值由数字的值决定,所以可以向上构建上层节点的值F.val分别是3,5,4. 在往上看,由T.val = F.val可知,终结符的val由因子的val决定,所以计算再上层的T.val也分别是3,5,4。再计算乘法和加法的终结符属性值,最终算出来E.val = 19 以及n。L为打印输出,最终输出了结果,语法分析树的各个节点的值就是这么自底向上算出来的。

 

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值