我正在开发一种中断器,让人们定义自己的运算符。然后的目标是采用一个看起来像的 AST,exp op exp op exp
并将其转换为exp op (exp op exp)
或(exp op exp) op exp
基于两个运算符的相对优先级和关联性。该语言是动态的,因此知道要使用哪个版本的运算符的唯一方法是评估第一个表达式并询问它op
要使用哪个版本。
另一方面,重要的是我们不评估第二个表达式,因为如果op
是||
(通常使用)那么我们应该能够短路如果第一个exp
是false
。
如果某个运算符既是右结合又是短路的,就会出现问题。 我的问题是是否有任何常用的正确关联、短路运算符(对于选择的“common”值)?
Nb 赋值由解析器单独处理,因此=
不是运算符,a (op)= b
是a = a op b
.