This question already has answers here:
What is the easiest way of telling whether a BNF grammar is ambiguous or not?
(2个答案)
根据这个语法:
我如何证明它是模棱两可的?
一个解析树是
我会让你解决另一个问题。
(2个答案)
根据这个语法:
<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
我会让你解决另一个问题。
关于algorithm - 歧义文法(BNF表示法),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20224227/
10-11 15:22