0

我有非常简单的语法:

E->E+T|T
T->T*F|F
F->(E)|id

我想扩展它以支持 unar 操作(恕我直言,这是正确的语法,但它可能是错误的,因为我在语法、解析器、词法分析器等方面是真正的 n00b):

E->E+T|T
T->T*F|F
F->+F|(E)|id

当我尝试更新解析表时,真正的问题出现了: 在此处输入图像描述

所以问题是我应该如何编辑这个表来提供一元操作支持(基于描述的语法)?

PS无论如何,我将非常感谢使用LR(k)(或LALR)解析器解析Java(或任何其他OO语言)中的ariphmetic表达式的任何帮助^_^

PS2。解析器生成器不适合这种情况。

4

1 回答 1

1

要了解如何调整解析表,您需要知道每个状态的 LR 项集是什么,并了解您对语法的添加如何更改项集——状态项集中的每个新的部分解析项都会为您提供解析表的附加操作。例如,在状态 7 中,您的原始项目集(在添加F -> + F规则之前)是:

T -> T * . F
F -> . ( E )
F -> . id

(在这种情况下,我忽略了前瞻,因为这无关紧要,但对于一般的 LR(k),您需要跟踪它。)

因此,您的新规则添加了 item F -> . + F,这为您提供了状态 7 的新操作(在 的输入上移动+。)这反过来又为您的表格提供了一个全新的状态。

于 2011-11-09T22:39:38.767 回答