解析器 AST - 二进制表达式与函数的优势

Parser AST - Advantage of Binary Expression vs Function

我已经为一种简单的内部 SQL 风格语言编写了一个解析器。这是一个典型的递归下降解析器。

自然地,我们有表达式,我建模的两种可能的表达式形式是 BinaryExpressionFunctionExpression。我的问题是,既然二元表达式可以建模为带有两个参数的函数,那么保持这种区别有什么好处吗?

也许函数调用通常不建模为表达式而是语句,但这里我所有的函数都必须产生一个值。

您选择如何建模您的语言完全取决于您;这完全取决于您打算如何使用您构建的 AST。

当然,二元运算符的求值与具有两个参数的函数的求值之间没有根本区别。另一方面,(在大多数语言中)呈现方式存在显着差异。某些运算符具有非常容易理解的属性,可在静态分析期间使用,例如寻找优化。

所以这两种样式当然都有效,您必须根据您对 AST 预期用途的了解做出选择。