变换该翻译模式,使嵌在产生式中间的语义动作集中仅含复写规则,并使得在自 底向上的语义计算过程中,文法符号的所有继承属性均可以通过归约前已出现在 分析栈中的确定的综合属性进行访问。
时间: 2024-03-15 16:41:46 浏览: 37
要将翻译模式中的语义动作集中仅含复写规则,可以使用一个叫做“属性文法”的技术。在属性文法中,每个文法符号都有一个或多个综合属性和一个或多个继承属性,每个产生式都有一个或多个语义规则,每个语义规则都是一个复写规则,使得该规则右部的每个符号的一个或多个属性值都复制到该规则左部的符号的一个或多个属性中。
具体来说,在本题的翻译模式中,可以将每个文法符号S、A和B分别定义一个综合属性num和一个继承属性in_num。产生式的语义规则可以分别转换为综合属性和继承属性的赋值操作。
S → A b {B.in_num := A .num + 100} B { S.num := B.num }
S → A b b {B.in_num := A .num + 50} B { S.num := B.num }
A → A1 a {A. num := A1.num + 1}
A → {A. num := 0}
B → {B1.in_num := B.in_num} B1 a {B. num := B1.num - 1}
B → {B. num := B.in_num }
在自底向上的语义计算过程中,文法符号的所有继承属性可以通过归约前已出现在分析栈中的确定的综合属性进行访问。在归约时,将综合属性的值复制到继承属性中,然后执行语义规则中的复写规则,将产生式右部的属性复制到产生式左部的属性中。最终,综合属性的值将在根节点处计算出来。
这种属性文法的优点是语义规则比较简单,易于理解和实现,而且可以保证属性计算的正确性和一致性。缺点是需要手动编写属性文法,比较繁琐,而且可能会导致文法规则的复杂度增加。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)