Lua 语言的语法是否存在歧义?

我阅读了 lua 语法

我看到了这个 enter image description here

看到了 "exp operatorMulDivMod exp" 部分 或者是 "exp operatorAddSub exp" 或其他部分

我认为我可以从该语法中构建两个语法树,对吗? 例如: a + b + c 或 a + b * c

点赞
用户589924
用户589924

你提供的示例分别由结合律和优先级处理。

但是语法存在歧义,请看下面的示例:

f()
( x or y )()

它可以被解析为两个语句,先不带参数调用 f,再不带参数调用 xy

但至少有一个编译器将其解析为三个函数调用的单个语句。

f()( g or h )()

如果想要前一种解释,可以使用 ; 来消除歧义。

f();
( x or y )()

后一种解释更有可能是编译器的解释。这种解释可以通过使用括号来确保,不过将中间结果存储在变量中可能更清晰。

2020-11-04 05:19:53