2
鑑於這種語法:曖昧語法(BNF符號)
<Program> ::= <Stmt> | <Program>; <Stmt>
<Conditional> ::= If <Bool> then <Program>
<Bool> ::= true | false
<Stmt> ::= <Conditional> | s1 | s2
如何證明它是模糊的?
鑑於這種語法:曖昧語法(BNF符號)
<Program> ::= <Stmt> | <Program>; <Stmt>
<Conditional> ::= If <Bool> then <Program>
<Bool> ::= true | false
<Stmt> ::= <Conditional> | s1 | s2
如何證明它是模糊的?
如果您可以爲同一個句子繪製兩個解析樹(或者等同地寫兩個最左邊的派生詞),則語法是不明確的。沒有一般的算法可以做到這一點(歧義是一個不可判定的問題),但對於許多語法來說並不難。
@rici給出的示例就足夠了。
If true then s1; s2
一個分析樹
<Program>
/ | \
<Program> ; <Stmt>
| |
<Stmt> s2
/|\__________
/| \ \
If <Bool> then <Program>
| |
true <Stmt>
|
s1
我會讓你的工作的另一個。
你可以提供同一個句子的兩個不同的派生。 –
通過爲某個句子找到兩個可能的解析。試試這個:'如果真的那麼s1; s2' – rici
這個問題已經被問及並回答:http://stackoverflow.com/questions/4788148/what-is-the-easiest-way-of-telling-whether-a-bnf-grammar-is-ambiguous-或-不?RQ = 1 –