0

考虑这个 BNF 语法:

<assign> = <id> = <expr>
<id> = A|B|C
<expr> = <id> + <expr>|<id> * <expr>|(<expr>)|<id>

这个语法没有歧义,因为一个语句只能绘制一个解析树。但是,这显然不遵循运算符优先级规则。运算符 *,+,() 具有相同的优先级。这个语法是明确的,还是只是不模棱两可?如果它是明确的,那么语法可以在不遵循运算符关联性和优先级规则的情况下是明确的,这是真的吗?

4

2 回答 2

1

“无歧义”和“不歧义”的意思完全相同,即只有一种可能的解释。这不是您期望的解释是不相关的。

于 2019-10-12T17:59:51.677 回答
0

这个语法是明确的吗?

是的。

因此,如果不遵循运算符关联性和优先级规则,语法可以是明确的,这是真的吗?

是的。运算符关联性和优先级是数学和编程语言的约定。歧义或缺乏歧义与语法是否符合这些约定无关。

于 2019-10-13T01:42:13.083 回答