微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

S-attributed定义自底向上求值中栈上文法符号表示状态的意义

如何解决S-attributed定义自底向上求值中栈上文法符号表示状态的意义

我正在阅读文本:编译器:原理、技术和工具,作者是 Ullman 等。 al (Red Dragon Book) 在那里我遇到了使用 S-attributed 解析器对 LR 语法进行自底向上评估的概念。现在我从本书前面的章节中了解到,LR 解析器使用堆栈来跟踪 DFA(LR 项的规范集合)的状态来模拟DFA。但是在下面给出的摘录中,他们似乎没有将状态编号(例如 12 ... 推送到堆栈上,而是使用某种 {{ 1}}。我不太明白这种新方法中如何保留通常的行为。

解析器堆栈上的综合属性

S 属性定义的翻译器通常可以在 unique grammar symbol which covers the state 解析器生成器的帮助下实现。根据 LR 定义,解析器生成器可以构建一个翻译器,在解析输入时评估属性

自底向上的解析器使用堆栈来保存有关已解析的子树的信息。我们可以在解析器堆栈中使用额外的字段来保存合成属性的值。图 5.15 显示一个解析器堆栈的示例,其中一个属性值有空间。让我们假设,如图所示,堆栈由一对数组 S-attributedstate 实现。每个状态条目都是一个指向 val 解析表的指针(或索引)。 (请注意,语法符号隐含在状态中,不需要存储在堆栈中。)但是,通过放置在解析堆栈上时覆盖的唯一语法符号来引用状态是很方便的。 如果第 LR(1) 个状态符号是 i,则 A 将保存与此 val[i] 对应的解析树节点关联的属性值。

Fig

当前栈顶由指针top指示。我们假设在每次减少之前评估合成属性。假设语义规则 A 与产生式 A.a := f(X.x,Y.y,Z.z) 相关联。在 A -> XYZ 降为 XYZ 之前,属性 A 的值在 Z.z 中,val[top] 的值在 Y.y 中,而val[top-1] 中的 X.x。如果符号没有属性,则 val[top-2] 数组中的相应条目未定义。减少后,val减少top覆盖2的状态被放入A(即state[top]所在的位置),并且综合属性 X 的值放在 A.a 中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?