Parsing 扩展语法以支持unar操作
我有非常简单的语法:Parsing 扩展语法以支持unar操作,parsing,grammar,lalr,lr,Parsing,Grammar,Lalr,Lr,我有非常简单的语法: E->E+T|T T->T*F|F F->(E)|id 我想扩展它以支持unar操作(这是正确的语法,但可能是错误的,因为我在语法、语法分析器、词法分析器等方面是真正的n00b): 当我试图更新解析表时,真正的问题出现了: 因此,问题是如何编辑此表以提供一元操作支持(基于所述语法) p.S.无论如何,如果您能帮助我使用LR(k)(或LALR)解析器解析Java(或任何其他OO语言)中的拟态表达式,我将不胜感激^_^ p.S.2.解析器生成器不适用于这种
E->E+T|T
T->T*F|F
F->(E)|id
我想扩展它以支持unar操作(这是正确的语法,但可能是错误的,因为我在语法、语法分析器、词法分析器等方面是真正的n00b):
当我试图更新解析表时,真正的问题出现了:
因此,问题是如何编辑此表以提供一元操作支持(基于所述语法)
p.S.无论如何,如果您能帮助我使用LR(k)(或LALR)解析器解析Java(或任何其他OO语言)中的拟态表达式,我将不胜感激^_^
p.S.2.解析器生成器不适用于这种情况。要了解如何调整解析表,您需要知道每个状态的LR项集是什么,并了解您对语法的添加是如何更改项集的——状态项集中的每个新的部分解析项都会为解析表提供额外的操作。 例如,在状态7中,原始项目集(在添加
F->+F
规则之前)是:
(在这种情况下,我忽略了前瞻,因为这并不重要,但对于一般的LR(k),您需要跟踪它。)
因此,您的新规则添加了项
F->.+F
,它为状态7提供了一个新的操作(在输入+
时移位),这又为您的表提供了一个全新的状态。是的,这是一个家庭作业(类似于)。“具体帮助什么?”->在本例中,我需要帮助将语法规则转换为解析表。我已经创建了几个不同的语法,但是我很难将它们转换成解析表(对于LR(k))。感谢您的指导-我添加了两个额外的状态,现在它工作得很好
E->E+T|T
T->T*F|F
F->+F|(E)|id
T -> T * . F
F -> . ( E )
F -> . id