我正在开发一个中断器,让我们定义自己的操作符。接下来的目标是使用看起来像exp op exp op exp
的AST,并根据两个运算符的相对优先级和相关性将其转换为exp op (exp op exp)
或(exp op exp) op exp
。该语言是动态的,因此了解要使用的运算符版本的唯一方法是评估第一个表达式并询问它使用的op
版本。
另一方面,重要的是我们不评估第二个表达式,因为如果op
是||
(如常用的那样)那么我们应该能够在第一个{{{{{ 1}}是exp
。
N.b。赋值由解析器单独处理,因此false
不是运算符,=
是a (op)= b
的语法糖。
答案 0 :(得分:1)
我可能会读
a → b → c
as" a暗示b暗示c"这表明它应该括号
a → (b → c)
和布尔暗示应该是短路的,因为当a为假时,(a→b)的右边与结果无关。