1

我正在开发一种中断器,让人们定义自己的运算符。然后的目标是采用一个看起来像的 AST,exp op exp op exp并将其转换为exp op (exp op exp)(exp op exp) op exp基于两个运算符的相对优先级和关联性。该语言是动态的,因此知道要使用哪个版本的运算符的唯一方法是评估第一个表达式并询问它op要使用哪个版本。

另一方面,重要的是我们不评估第二个表达式,因为如果op||(通常使用)那么我们应该能够短路如果第一个expfalse

如果某个运算符既是右结合又是短路的,就会出现问题。 我的问题是是否有任何常用的正确关联、短路运算符(对于选择的“common”值)?

Nb 赋值由解析器单独处理,因此=不是运算符,a (op)= ba = a op b.

4

1 回答 1

1

布尔含义可能是。

我可能会读

a → b → c

因为“a 暗示 b 暗示 c”,这表明它应该用括号括起来

a → (b → c)

并且布尔含义可能应该是短路的,因为当 a 为假时, (a → b) 的右侧与结果无关。

于 2012-06-19T04:34:44.227 回答