如何解决AST 设计 - 增量运算符是语句还是表达式?
我正在尝试在我的解析器中实现增量运算符。 但是,我对增量运算符是否应该被视为语句或表达式感到困惑。将其实现为语句是有意义的,因为可以将其用作独立语句,例如:
i++;
但是它也可以用在表达式中,例如:
int 2 = i++;
这对我的 AST 有影响,因为我目前有两种类型的节点,一个表达式节点和一个语句节点,其他节点可以接受它们作为它们的子节点。一个表达式节点在运行解释器的代码生成部分时总会有一个返回值。
在其他语言中,关于 AST 的增量运算符是如何分类的?它们最好表示为表达式还是语句?
解决方法
如果写 int variableName = i++;
是合法的,那意味着 i++
是一个表达式。 i++;
是一个合法的语句意味着 <increment-operator> ';'
被定义为一个有效的语句,直接或更常见地使用诸如 <statement> ::= <expression> ';'
之类的规则,即“一个表达式后跟一个分号是一个语句”。这种类型的语句称为表达式语句,这也是为什么您可以在大多数语言中将函数调用用作语句的原因(某些语言限制了表达式语句中可以使用的表达式类型,以禁止 42;
等无操作语句或 x+y;
,但其他语言允许这样做)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。