Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 关于编译器的基本课程_Compiler Construction - Fatal编程技术网

Compiler construction 关于编译器的基本课程

Compiler construction 关于编译器的基本课程,compiler-construction,Compiler Construction,几个月来,我试图了解编译器是如何工作的。现在,我不关心语法分析、将其拆分为令牌和创建AST。我想把重点放在可执行文件的创建上。据我所知,编译器将代码拆分并将其转换为汇编指令,然后以某种方式将汇编指令转换为可执行代码 我想为自定义编程语言创建一个基本编译器。这样做的唯一可能性是使用汇编程序,将源代码转换为汇编语言,然后进行汇编吗?或者可以不使用第三方工具创建可执行文件。我的项目缺少的唯一代码片段是如何根据汇编指令创建EXE文件 我知道这是一个非常复杂的话题。这就是为什么我在寻找创建跨平台编译器的技

几个月来,我试图了解编译器是如何工作的。现在,我不关心语法分析、将其拆分为令牌和创建AST。我想把重点放在可执行文件的创建上。据我所知,编译器将代码拆分并将其转换为汇编指令,然后以某种方式将汇编指令转换为可执行代码

我想为自定义编程语言创建一个基本编译器。这样做的唯一可能性是使用汇编程序,将源代码转换为汇编语言,然后进行汇编吗?或者可以不使用第三方工具创建可执行文件。我的项目缺少的唯一代码片段是如何根据汇编指令创建EXE文件

我知道这是一个非常复杂的话题。这就是为什么我在寻找创建跨平台编译器的技术。我还想知道是否可以像G++那样编译一个编译器,把我的代码转换成C++代码并编译它。 g++。这是一个替代计划,但仍然不是我想要创造的。我是否必须为每个单独的处理器架构编写编译器/汇编程序?我基本上如何做到这一点?在对此进行了几个月的研究之后,我终于决定询问对这一主题有更好了解的人

我希望你能照亮我的心灵


你好,布兰贝里你的问题基本上是离题的。然而,一本关于编译的好书是值得一读的。(你也可以读斯科特和奎内克的)

据我所知,编译器将代码拆分并将其转换为汇编指令,然后以某种方式将汇编指令转换为可执行代码

这比那要复杂得多。编译器实际上(而且很多时候)正在转换一些内部表示,以达到目的(优化是一个重要但困难的主题,这就是为什么)。。例如,大多数优化过程(GCC有数百个)正在转换为Gimple (例如为……等)

这就是为什么我在寻找创建跨平台编译器的技术。我还想知道是否可以像G++那样编译一个编译器,将我的代码转换成C++代码,并用G++编译。p> 一般来说,很多人把C作为一种可移植的目标编程语言,而不是C++。解释得更多。实际上,生成真正的嗅觉良好的C++代码可能很困难(例如使用C++容器和智能指针)。最后,你的系统C++编译器可能需要很多时间来编译你生成的C++代码(换句话说,C++编译速度慢)。 或者可以不使用第三方工具创建可执行文件

这是可能的,但是为什么要避免使用第三方工具呢?请注意,许多编译器至少使用汇编程序和链接器(两者都被称为“第三方工具”)。如果您选择生成C(可能是一个不错的选择),那么您将使用的C编译器是一个第三方工具(而且是一个相当大的工具!)

如果您想自己直接生成可执行文件(我不建议这样做,这需要大量的工作),那么您需要准确地了解可执行文件的类型(这是操作系统特有的),例如或。我推荐莱文的书。您可能还需要了解如何为您的操作系统(请阅读),并且需要为您的语言实现一些。使事情复杂化

你可以考虑一个JIT翻译库,比如其他的(提到的)。 我是否必须为每个单独的处理器体系结构编写编译器/汇编程序,基本上如何做到这一点

大多数编译器通过定义一些目标中立的中间表示(例如,对于GCC)来处理这个问题。大多数优化都是在(并使用)该中间表示上完成的


另外,在您的情况下,我强烈建议您为Linux及以上版本构建编译器,因为Linux是由您可以学习的编译器组成的。如果你使用Windows,有些细节是不公开的,对你来说很重要,你需要花很多时间来了解它们。

你的问题基本上是离题的。然而,一本关于编译的好书是值得一读的。(你也可以读斯科特和奎内克的)

据我所知,编译器将代码拆分并将其转换为汇编指令,然后以某种方式将汇编指令转换为可执行代码

这比那要复杂得多。编译器实际上(而且很多时候)正在转换一些内部表示,以达到目的(优化是一个重要但困难的主题,这就是为什么)。。例如,大多数优化过程(GCC有数百个)正在转换为Gimple (例如为……等)

这就是为什么我在寻找创建跨平台编译器的技术。我还想知道是否可以像G++那样编译一个编译器,将我的代码转换成C++代码,并用G++编译。p> 一般来说,很多人把C作为一种可移植的目标编程语言,而不是C++。解释得更多。实际上,生成真正的嗅觉良好的C++代码可能很困难(例如使用C++容器和智能指针)。最后,你的系统C++编译器可能需要很多时间来编译你生成的C++代码(换句话说,C++编译速度慢)。 或者可以不使用第三方工具创建可执行文件

这是可能的,但是为什么要避免使用第三方工具呢?请注意,许多编译器至少使用汇编程序和链接器(两者都被称为“第三方工具”)。如果您选择生成C(可能是一个不错的选择),那么您将使用的C编译器是一个第三方工具(而且是一个相当大的工具!)

如果您想自己直接生成可执行文件(我不建议这样做,这需要大量的工作),那么您需要准确地了解可执行文件的类型(这是操作系统特有的),例如或。我推荐莱文的书。您可能还需要了解如何为您的客户服务