考虑此BNF语法:
<assign> = <id> = <expr>
<id> = A|B|C
<expr> = <id> + <expr>|<id> * <expr>|(<expr>)|<id>
此语法不是模棱两可的,因为只能为一个语句绘制一棵解析树。但是,这显然不遵循运算符优先规则。运算符*,+,()具有相同的优先级。此语法是明确的还是才不not昧吗?如果它是明确的,那么语法就可以是明确的,而无需遵循运算符的关联性和优先级规则,这是真的吗?
“明确”和“不明确”表示完全相同的事物,即只有一种可能的解释。那不是您期望的解释是不相关的。
此语法是否明确?
是
因此,不遵循运算符的关联性和优先级规则,语法可以是明确的,对吗?
是。运算符的关联性和优先级是数学和编程语言中的约定。歧义或缺乏歧义与语法是否符合那些约定无关。