0

在编译的哪个阶段(扫描,解析,语义分析的某个部分,或者甚至可能是代码生成)是通常处理的语法糖,它的原因是什么以及原因是什么?实现糖语法

+0

根据语言的不同,语法糖通常在源代码本身中实现 ​​- 即在编译器链外部实现。一个非常受欢迎的示例是jQuery,它在JavaScript本身中引入语法糖作为库,而不需要用户重新编译其Web浏览器。 – slebetman

+0

其他很容易直接在语言本身实现语法糖的语言包括lisp(Scheme等)和tcl。一个极端的例子是lisp和tcl中面向对象的编程特性最初是直接用语言实现的,而不需要对编译器/解析器进行任何修改 – slebetman

+0

@slebetman - 考虑到脱糖的可能需要以及源无论如何要经历所有的编译器阶段,你会建议执行源代码替换吗?无论如何,调试工作如何?我无法想象它。 – sjaustirni

回答

3

最简单的做法往往是在建立AST时 - 也就是在解析过程中 - 因为这会使得desugaring显而易见并且可以验证,并且此后不需要处理糖在语义分析和代码生成期间的任何方式。

这是一个非常普遍的指导方针,无数的情况下您可能会选择不同的策略。