我写一个语法(YACC - “LALR”)应该认识到下面的话,例如:缩小/减少冲突
ident(ident,...,ident) = ident(num,ident,num,...,num)
ident(ident,...,ident) = num
ident = num
ident = ident(num,ident,num,...,num)
ident(ident,num,...,num)
num
ident
我写了下面的语法:
(1) L : ident (PARAM) = E
(2) L : E
(3) E : ident (ARG)
(4) E : N
(5) N : num
(6) N : ident
(7) ARG : ARG , E
(8) ARG : E
(9) PARAM : PARAM , ident
(10)PARAM : ident
所以,我的问题是规则(6)和(10)之间的减少/减少冲突。 有没有人有如何解决这个问题的想法?
以前,我问了以下问题,认为这是对我真正问题的简化......但事实并非如此。
为了记录在案,我刚才的问题是在语法识别那些话:
a
b
b,b
b,b,b
[...]
b,b,b,[...],b # infinite list of b
所以,我写了下面的语法:
L : E
| F
E : a
| b
F : F , b
| b
但是,从逻辑上讲,我有一个减少/减少冲突的规则:
F : b
和
E : b
这个问题的正确语法是:
E : a
E : F
F : F,b
F : b
显而易见的解决方案是删除产品'E:b'。你为什么认为你需要它? – rici
你是对的,这个例子不是我所拥有的...我想简化我的问题,但这不是我真正的问题。我将重新发布正确的语法! – Samfaitmal