2016-10-26 5 views
0

私は、LL構文解析(語彙解析)を作成するための命題論理の文法を書こうとしています。命題論理の文法の正確さ

私は、次の文法試してみました:

F = F and F 
F = F or F 
F = F => F 
F = F <=> F 
F = not F 
F = (F) 
D = a 

を私はそれがあいまいであることを発見しました。私はあいまいさを取り除くために以下を試みました:

F = F and A 
F = A 
A = F or B 
A = B 
B = F => C 
B = C 
C = F <=> C 
C=D 
D = not F 
D = (F) 
D = a 

この文法は正しいですか?私はあいまいさを取り除くことに成功しましたか?

+0

コンパイラを勉強してからしばらくしてきましたが、正しく覚えていれば、通常、語彙分析は主にトークン化のステップ(文法を使って解析しない)を指します。 – EJoshuaS

+0

トークン化? nooooooooo –

+0

私はこの点を誤解している可能性があります。私はこのことを勉強してからしばらくしていると言いました。 – EJoshuaS

答えて

0

文法はまだあいまいです。ここで ための2つの導出はありませんと:

導出1:

F 
F and A 
A and A 
B and B 
C and C 
not F and a 
not A and a 
not B and a 
not C and a 
not D and a 
not a and a 

導出2:

F  
A 
B 
C 
D 
not F 
not F and A 
not A and A 
not B and B 
not C and C 
not D and D 
not a and a 

あなたは、例えば、あなたの派生、前後に括弧を挿入する必要があります F =(FとA)

括弧を使用しない場合は、prefix notationを使用することもできます。