Compiler construction 实现sugar语法

Compiler construction 实现sugar语法,compiler-construction,language-agnostic,programming-languages,language-features,language-translation,Compiler Construction,Language Agnostic,Programming Languages,Language Features,Language Translation,在编译的哪个阶段(扫描、解析、语义分析的某些部分,甚至 代码生成)通常是语法糖处理的,其原因是什么?最简单的方法通常是在构建AST的时候——即在解析过程中——因为这使去糖变得明显和可验证,此后,在语义分析和代码生成过程中,不需要以任何方式处理糖 这是一个非常普遍的指导原则,在无数种情况下,您可能会选择不同的策略。最简单的方法通常是在构建AST的时候——也就是在解析过程中——因为这使得去糖化变得明显和可验证,此后,在语义分析和代码生成过程中,不需要以任何方式处理糖 这是一个非常普遍的指导原则,在无

在编译的哪个阶段(扫描、解析、语义分析的某些部分,甚至
代码生成)通常是语法糖处理的,其原因是什么?最简单的方法通常是在构建AST的时候——即在解析过程中——因为这使去糖变得明显和可验证,此后,在语义分析和代码生成过程中,不需要以任何方式处理糖


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

最简单的方法通常是在构建AST的时候——也就是在解析过程中——因为这使得去糖化变得明显和可验证,此后,在语义分析和代码生成过程中,不需要以任何方式处理糖


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

最简单的方法通常是在构建AST的时候——也就是在解析过程中——因为这使得去糖化变得明显和可验证,此后,在语义分析和代码生成过程中,不需要以任何方式处理糖


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

最简单的方法通常是在构建AST的时候——也就是在解析过程中——因为这使得去糖化变得明显和可验证,此后,在语义分析和代码生成过程中,不需要以任何方式处理糖



这是一个非常通用的指导原则,在很多情况下,您可能会选择不同的策略。

根据语言的不同,语法sugar通常在源代码本身中实现,也就是说,在编译器链之外。一个非常流行的例子是jQuery,它在javascript本身中将语法糖作为一个库引入,而不需要用户重新编译他们的web浏览器。其他非常容易在语言本身中直接实现语法糖的语言包括lisp(Scheme等)和tcl。一个极端的例子是lisp和tcl中的面向对象编程功能最初是直接在语言中实现的,不需要对编译器进行任何修改/parser@slebetman-考虑到脱糖的可能需要,以及源代码无论如何都必须经过所有编译器阶段的事实,您是否建议执行源代码内替换?不管怎样,调试是如何工作的?我无法想象。不是在源代码替换中。糖只是功能。一些语言的语法非常简单,以至于函数调用看起来像syntaxYes。例如,在tcl中,没有表达式,只有函数调用(想象一下bash或dos,您就会理解tcl语法)。因此,数组语法可以很容易地实现为如下函数:
proc Array{vector\u string operand value}{…}
,您现在可以键入
Array[i,j]=value
。您甚至可以通过使用名为
未知
函数的功能消除
数组
[]
之间的空白,该函数在您尝试调用未定义函数时会被调用。根据语言的不同,语法糖通常在源代码本身中实现,即在编译器链之外。一个非常流行的例子是jQuery,它在javascript本身中将语法糖作为一个库引入,而不需要用户重新编译他们的web浏览器。其他非常容易在语言本身中直接实现语法糖的语言包括lisp(Scheme等)和tcl。一个极端的例子是lisp和tcl中的面向对象编程功能最初是直接在语言中实现的,不需要对编译器进行任何修改/parser@slebetman-考虑到脱糖的可能需要,以及源代码无论如何都必须经过所有编译器阶段的事实,您是否建议执行源代码内替换?不管怎样,调试是如何工作的?我无法想象。不是在源代码替换中。糖只是功能。一些语言的语法非常简单,以至于函数调用看起来像syntaxYes。例如,在tcl中,没有表达式,只有函数调用(想象一下bash或dos,您就会理解tcl语法)。因此,数组语法可以很容易地实现为如下函数:
proc Array{vector\u string operand value}{…}
,您现在可以键入
Array[i,j]=value
。您甚至可以通过使用名为
未知
函数的功能消除
数组
[]
之间的空白,该函数在您尝试调用未定义函数时会被调用。根据语言的不同,语法糖通常在源代码本身中实现,即在编译器链之外。一个非常流行的例子是jQuery,它在javascript本身中将语法糖作为一个库引入,而不需要用户重新编译他们的web浏览器。其他非常容易在语言本身中直接实现语法糖的语言包括lisp(Scheme等)和tcl。一个极端的例子是lisp和tcl中的面向对象编程功能最初是直接在语言中实现的,不需要对编译器进行任何修改/parser@slebetman-考虑到脱糖的可能需要,以及源代码无论如何都必须经过所有编译器阶段的事实,您是否建议执行源代码内替换?不管怎样,调试是如何工作的?我无法想象。不是在源代码替换中。糖只是功能。碰巧有些语言的语法非常简单,以至于函数调用c