什么是语言前端?
What is a language frontend?
我对编程语言和编译器上下文中前端和后端的定义感到困惑。
The LLVM compiler infrastructure project is a set of compiler and toolchain technologies, which can be used to develop a front end for any programming language and a back end for any instruction set architecture.
当我搜索“编程语言前端”时,我只找到 HTML CSS JS,我知道这不是它在这种情况下所指的。任何人都可以向我解释或指导我找到正确的资源吗?
编译器的front-end是编译器中从原始源代码开始到结束的部分具有该程序“含义”的某种内部表示,以某种格式存储,允许编译器的其余部分理解该结构并开始生成代码。这是(通常)完成扫描、解析和语义分析的地方。
编译器的back-end是编译器的一部分,它采用内部表示并使用它来生成某种格式的代码(汇编、机器代码、JVM 字节码、LLVM 位码等)它通常处理优化、指令选择、寄存器分配等事情
一些编译器将这两部分分解为逻辑上独立的组件。有时它们交织在一起。 LLVM 的部分目标是实现它,以便您可以为一种新语言构建一个 front-end,然后将其挂接到现有后端,这样您就可以设计一种新语言并获得其他所有不错的优化工作人们已经完成,或者为现有的前端构建新的后端,以防您想使用新的分析来分析以某种现有语言编写的程序。
我对编程语言和编译器上下文中前端和后端的定义感到困惑。
The LLVM compiler infrastructure project is a set of compiler and toolchain technologies, which can be used to develop a front end for any programming language and a back end for any instruction set architecture.
当我搜索“编程语言前端”时,我只找到 HTML CSS JS,我知道这不是它在这种情况下所指的。任何人都可以向我解释或指导我找到正确的资源吗?
编译器的front-end是编译器中从原始源代码开始到结束的部分具有该程序“含义”的某种内部表示,以某种格式存储,允许编译器的其余部分理解该结构并开始生成代码。这是(通常)完成扫描、解析和语义分析的地方。
编译器的back-end是编译器的一部分,它采用内部表示并使用它来生成某种格式的代码(汇编、机器代码、JVM 字节码、LLVM 位码等)它通常处理优化、指令选择、寄存器分配等事情
一些编译器将这两部分分解为逻辑上独立的组件。有时它们交织在一起。 LLVM 的部分目标是实现它,以便您可以为一种新语言构建一个 front-end,然后将其挂接到现有后端,这样您就可以设计一种新语言并获得其他所有不错的优化工作人们已经完成,或者为现有的前端构建新的后端,以防您想使用新的分析来分析以某种现有语言编写的程序。