【发布时间】:2021-01-12 14:17:15
【问题描述】:
我目前正在实现一个 LR(k) 解析器解释器,只是为了好玩。
我正在尝试实现优先级和关联性。
当谈到如何为“动作”部分分配关联性和优先级时,我有点卡住了,即减少的优先级和关联性应该是什么。
如果我们有作品
E ->
| E + E { action1 }
| E * E { action2 }
| (E) { action3 }
| ID { action4 }
应该很清楚,action1 应该与 + 具有相同的关联性和优先级 和 action2 应该与 * 相同。但总的来说,我们不能仅仅假设生产中的规则只有一个具有优先级的符号。一个玩具例子
E -> E + E - E { action }
其中 - 和 + 是一些任意运算符,具有一定的优先级和关联性。该动作是否应该与 - 相关联,因为它在最后一个 E 之前?
我知道如何在移位/减少之间进行选择的规则,这不是我要求的。
【问题讨论】:
标签: parsing lr language-implementation