【发布时间】:2021-07-09 23:02:46
【问题描述】:
我很好奇编译器如何以及何时将语法糖“脱糖”成最终形式。语法糖的一个例子是增量语句 i++ 变成了赋值语句 i=i+1,或者支持运算符重载的语言。
我知道许多不同的编译器会在不同的阶段以不同的方式和不同的阶段实现“脱糖”过程,所以我对任何语言的粗略示例都很满意。
我指的是编译过程的各个不同阶段,例如解析、语义分析、中间、代码生成等。
我对 AST 的影响(如果有的话)以及它可能发生的任何潜在转换特别感兴趣。
【问题讨论】:
-
这肯定发生在代码生成之前 :-)。除此之外,我认为没有比“这取决于”更好的答案了。至少,我不会尝试一个。 (后缀
++比简单的替换为(x = x + 1)更复杂,因为替换表达式的返回值是x的新值,但后缀递增的语义要求返回值是旧值。 ) -
@rici 虽然我理解您为什么回复评论,但在这种情况下,因为问题比客观更主观,我认为您应该将其发布为答案,以便其他人可以看到问题一个答案。如果我是 OP,我会支持它作为答案并接受它。
标签: compiler-construction abstract-syntax-tree syntactic-sugar