AST 设计——增量运算符是语句还是表达式?

AST design - is a increment operator a statement or an expression?

我正在尝试在我的解析器中实现增量运算符。 但是,我对增量运​​算符是否应该被视为语句或表达式感到困惑。将它实现为一条语句是有意义的,因为可以将它用作一个独立的语句,例如:

i++;

但是它也可以用在如下表达式中:

int 2 = i++;

这对我的 AST 有影响,因为我目前有两种类型的节点,一个表达式节点和一个语句节点,其他节点可以接受它们作为它们的子节点。当 运行 通过解释器的代码生成部分时,表达式节点将始终具有 return 值。

关于 AST,其他语言中的增量运算符是如何分类的?它们最好表示为表达式还是语句?

如果写int variableName = i++;是合法的,那就意味着i++是一个表达式。 i++; 是一个合法的陈述意味着 <increment-operator> ';' 被定义为一个有效的陈述,直接或更常见地使用诸如 <statement> ::= <expression> ';' 的规则,即“一个表达式后跟一个分号是一个陈述”。这种类型的语句称为表达式语句,这也是为什么您可以在大多数语言中将函数调用用作语句的原因(某些语言限制表达式语句中可以使用的表达式类型以禁止像 42; 这样的空操作语句或 x+y;,但其他语言允许这些)。