【发布时间】:2024-04-19 09:55:01
【问题描述】:
我正在开发一种中断器,可以让人们定义自己的运算符。然后目标是采用看起来像exp op exp op exp 的AST,并根据两个运算符的相对优先级和关联性将其转换为exp op (exp op exp) 或(exp op exp) op exp。该语言是动态的,因此知道要使用哪个版本的运算符的唯一方法是评估第一个表达式并询问它要使用哪个版本的 op。
另一方面,重要的是我们不要评估第二个表达式,因为如果op 是||(如常用),那么如果第一个exp 是@987654328,我们应该能够短路@。
如果某些运算符既是右结合又是短路的,就会出现问题。 我的问题是,是否有任何常用的右结合、短路运算符(对于选定的“common”值)?
注意分配由解析器单独处理,因此= 不是运算符,a (op)= b 是a = a op b 的语法糖。
【问题讨论】:
-
实际上,正确的关联性更有意义。尝试可视化
a or b or c or d or e的解析树。当left-associative 和a为真时,我们会在树的顶部向上、向上和向上走,以在顶部为真。当右关联时,如果a为真,ta-da,我们就完成了!忽略整个表达式的其余部分要容易得多。你为什么说右结合有问题?恕我直言,他们都有相同的行为。
标签: language-design short-circuiting