正在加载图片...
4.S-属性定义中只包含综合属性。L-属性定义中可以有继承属性,但产生式右 端某文法符号的继承属性的计算只取决于该符号左边文法符号(包括产生式左边 的文法符号)的属性,可参见教材174页。S-属性定义是L属性定义的一个特例。 5.S-属性定义的翻译通常采用自下而上的方式进行。若采用LR分析技术,可 以通过扩充分析栈中的域,形成语义栈来存放综合属性的值,计算相应产生式左 部文法符号的综合属性值刚好发生在每一步归约之前的时刻。 例如,假设有相应于产生式A→XYZ的语义规则Aa=f(Xx,Yy,Zz) 在ⅩYZ归约到A之前,Xx,Yy,和Zz分别存放于语义栈的top,top-1和top-2 的相应域中,因此Aa可以顺利求出。归约后,Xx,Yy,Z.z被弹出,而在栈顶 top的位置上存放Aa 6.L-属性定义的翻译可以采用深度优先后序遍历的方式进行,参考如下算法(见 影印板龙书297页) procedure dfvisit(n: node); forn的每一孩子m,从左到右do begin 计算m的继承属性值; dfvisit(m) end 计算n的综合属性值 end 该算法可以和自上而下预测分析的过程对应。因此,基于LL(1)文法的L 属性定义可以采用这种方法进行翻译。 7.翻译模式( Translation Scheme)形式上类似于属性文法,但允许由{括起来4. S-属性定义中只包含综合属性。L-属性定义中可以有继承属性,但产生式右 端某文法符号的继承属性的计算只取决于该符号左边文法符号(包括产生式左边 的文法符号)的属性,可参见教材 174 页。S-属性定义是 L-属性定义的一个特例。 5.S-属性定义的翻译通常采用自下而上的方式进行。若采用 LR 分析技术,可 以通过扩充分析栈中的域,形成语义栈来存放综合属性的值,计算相应产生式左 部文法符号的综合属性值刚好发生在每一步归约之前的时刻。 例如,假设有相应于产生式 A→XYZ 的语义规则 A.a := f(X.x, Y.y, Z.z)。 在 XYZ 归约到 A 之前,X.x, Y.y, 和 Z.z 分别存放于语义栈的 top,top-1 和 top-2 的相应域中,因此 A.a 可以顺利求出。归约后,X.x, Y.y, Z.z 被弹出,而在栈顶 top 的位置上存放 A.a。 6.L-属性定义的翻译可以采用深度优先后序遍历的方式进行,参考如下算法(见 影印板龙书 297 页): procedure dfvisit(n: node); begin for n 的每一孩子 m, 从左到右 do begin 计算 m 的继承属性值; dfvisit(m) end; 计算 n 的综合属性值 end 该算法可以和自上而下预测分析的过程对应。因此,基于 LL(1)文法的 L- 属性定义可以采用这种方法进行翻译。 7. 翻译模式(Translation Scheme)形式上类似于属性文法,但允许由{}括起来
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有