扩展语法以支持unar操作

时间:2011-11-09 21:50:57

标签: parsing grammar lalr lr

我的语法非常简单:

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

当我尝试更新解析表时,真正的问题出现了: enter image description here

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

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

P.S.2。在这种情况下,解析器生成器不适用。

1 个答案:

答案 0 :(得分:1)

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

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

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

因此,您的新规则会添加项F -> . + F,这会为您提供状态7的新操作(转换为+的输入。)这反过来为您的表提供了一个全新的状态