给定语法是否有歧义?
Given grammar ambiguous or not?
考虑下面的语法...
bexp -> bterm | bterm ‘||’ bexp
bterm -> bfact | bfact ‘&&’ bterm
bfact -> true | false | id | ‘(‘ bexp ‘)’
假设我们用 '!' 扩展 BEXP通过如下更改 bfact 规则来否定运算符:-
bfact -> true | false | id | '(' bexp ')' | '!' bexp
我们将此扩展语法称为 BEXP2。我如何证明它是模棱两可的?
你可以通过找到一个有两个解析的字符串来证明它是有歧义的:)
在这种情况下,请尝试 !id&&id
。是 (!id)&&id
还是 !(id&&id)
考虑下面的语法...
bexp -> bterm | bterm ‘||’ bexp
bterm -> bfact | bfact ‘&&’ bterm
bfact -> true | false | id | ‘(‘ bexp ‘)’
假设我们用 '!' 扩展 BEXP通过如下更改 bfact 规则来否定运算符:-
bfact -> true | false | id | '(' bexp ')' | '!' bexp
我们将此扩展语法称为 BEXP2。我如何证明它是模棱两可的?
你可以通过找到一个有两个解析的字符串来证明它是有歧义的:)
在这种情况下,请尝试 !id&&id
。是 (!id)&&id
还是 !(id&&id)