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)。

相關問題