0

我正在构建语法分析器。单反(1)很好,但我相信有一些减少/移位冲突或某种冲突会使解析器过早拒绝字符串。这里是语法: 注意:我确实留下了语法因素来看看这是否是问题,但这并没有消除歧义。然而,这是没有左保这种上下文无关的语法是不明确的,我不知道为什么。我正在构建的SLR(1)编译器无法按照我期望的方式工作

P'' -> P'$ 

P' -> P 

P -> C | C;D 

D -> R | RD 

R -> pu{P} 

C -> I | I;C 

I -> h | O | A | R | Z 

O -> i(V) | z(V) 

Y -> u 

V -> S | N 

S -> u 

N -> u 

A -> S=s | S=S | N=X 

X -> N | b | L 

L -> d(X,X) | s(X,X) | m(X,X) 

R -> f(B)t{C} | f(B)t{C}1{C} 

B -> e(V,V) | (N<N) | (N>N) | nB | a(B,B) | o(B,B) 

Z -> w(B){C} | r(N=0;N<N;N=a(N,1)){C} 

我明白这个语法是相当大的,但如果你能帮助我在这里,你将是一个生命的救星原来的语法。先谢谢你!

+0

嗯,我认为还有一些值得引用的转换值不在相关的语法制作中,就像'C - >我'一个 –

+0

我看不到,你给的作品,任何在字符串末尾产生分号的方法 –

+0

@JeffersonQuesado我添加了文法的其余部分 – user1538070

回答

1

在认识一个I,并与;作为下一个符号,有一个转变,减少冲突:

  • 生产C -> I;C说的;转移。
  • 生产P -> C;D说通过C -> I减少。

所以语法不是单反(1)。

相关问题