SDD与SDT的区别

SDD与SDT的区别

这里拷贝了哈工大的SDD与SDT定义

SDD与SDT的区别:

  • SDD
    • 是关于语言翻译的高层次规格说明
    • 隐蔽了许多具体实现细节,使用户不必显式地说明翻译发生的顺序
  • SDT
    • 可以看作是对SDD的一种补充,是SDD的具体实施方案
    • 显式地指明了语义规则的计算顺序,以便说明某些实现细节

身为计算机系的学生,如果觉得概念难以理解,便用例子加以理解.

例如,对于乘法的消除左递归的CFG
T → F T ′ T ′ → ∗ F T ′ T ′ → ε F → d i g i t T\to FT^{'}\\ T^{'}\to *FT^{'}\\ T^{'}\to \varepsilon \\ F\to digit TFTTFTTεFdigit
对于产生式 T ′ → ∗ F T ′ T^{'}\to *FT^{'} TFT,其对应的SDD为

T ′ → ∗ F T 1 ′ T^{'}\to *FT_1^{'} TFT1 T 1 ′ ⋅ i n h = T ′ . i n h × F . v a l T_{1}^{\prime} \cdot inh =T^{\prime} . inh \times F.val T1inh=T.inh×F.val
T ′ ⋅ s y n = T 1 ′ ⋅ s y n T^{\prime} \cdot s y n=T_{1}^{\prime} \cdot s y n Tsyn=T1syn

而其SDT则为
T ′ → ∗ F { s t a c k [ t o p + 3 ] . T ′ i n h = s t a c k [ t o p ] . i n h ; } T 1 ′ { s t a c k [ t o p ] = s t a c k [ t o p + 6 ] } T^{\prime} \rightarrow^{*} F\left\{ stack[top+3].T^{'}inh =stack[top].inh;\right\} T_{1}^{\prime}\left\{stack[top]=stack[top+6]\right\} TF{stack[top+3].Tinh=stack[top].inh;}T1{stack[top]=stack[top+6]}
SDD说明在语法分析阶段应用该产生式时, T 1 ′ ′ T_1^{''} T1通过继承属性 i n h inh inh T T T F F F的值继承下去,从而传递给其他节点.同时在计算结束后通过综合属性 s y n syn syn将结果返回给 T ′ T^{'} T.(具体见龙书5.1.2 中对继承属性与综合属性作用的阐释)

而SDT则给出了具体的实现方案,即通过对扩展语法分析栈的操作实现.

总结一下,语法制导定义更加易读,因为它在更高的层次上指出了语法翻译的任务,而SDT则具体给出了SDD的实现,例如何时计算,如何计算这些细节.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值