Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 扩展语法以支持unar操作_Parsing_Grammar_Lalr_Lr - Fatal编程技术网

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