Compiler construction 为新语言编写引导编译器的第一步是什么?
假设你正在为一种新语言创建一个编译器,比如说Big Lang。如果你要为Big Lang启动一个编译器,你将为Big Lang lite编写一个编译器,Big Lang lite是Big Lang的最小可能子集。现在,我想知道Big Lang lite的编译器可以用Big Lang编写,或者我们将不得不使用其他语言,如果我们正在制作一个引导编译器 以下是引导的常用方法Compiler construction 为新语言编写引导编译器的第一步是什么?,compiler-construction,Compiler Construction,假设你正在为一种新语言创建一个编译器,比如说Big Lang。如果你要为Big Lang启动一个编译器,你将为Big Lang lite编写一个编译器,Big Lang lite是Big Lang的最小可能子集。现在,我想知道Big Lang lite的编译器可以用Big Lang编写,或者我们将不得不使用其他语言,如果我们正在制作一个引导编译器 以下是引导的常用方法 设计语言X 用另一种语言为X内核编写编译器 在X内核中为X内核编写编译器 从3编译编译器。使用2中的编译器。(你大部分都是自举的
bootstrap/ocamlc
(事实上,Ocaml有一个可移植的字节码VM帮助很大);类似的方法可能是由和;在(一个LISP类特定领域的语言中,我正在致力于扩展和定制GCC编译器),它是生成的C++文件<代码>熔体/生成/*.cc;Ocaml和MELT都将“编译的编译器”置于版本控制之下(并分发它…)。在熔体中,原始编译器PC是一个常见的LISP程序(接受当前熔体语言的一个非常小的子集),而BC是引导的熔体编译器(文件<代码>熔体/Wal熔体*。熔体<代码> >熔体源代码和<代码>熔体/生成/华融*.cc<代码>代码>生成的C++代码)。请随时询问有关其上的MELT bootstrap的问题。该语言有一个稍微不同的方法:它的引导构建在Web上获取一些可执行文件(一些较旧版本的编译器)
引导一门语言与其说是一门科学,不如说是一门艺术。根据经验,小步走通常是值得的。你可能想读J.Pitrat(J.Pitrat最喜欢的主题是强大的人工智能是一个过程:你需要强大的AI来实现强大的AI,另请参见)。您还可以阅读C.Queinnec(如果您阅读法语,请阅读最新版本)解释如何引导类似Lisp的实现
附加参考
你当然也应该读一读(因为J.Pitrat的一半职业生涯都是在引导人工智能方面工作的)。所以基本上我们需要先用其他语言为X编写编译器,然后再用X编写。这不是我们加倍努力的结果吗?这并不是真的加倍努力(这是一个必要的步骤,除非你能用目标语言编写整个编译器)。特别是,它能让你理解X编译器实现的细节(邪恶就在细节中)@苏里亚想一想,如果没有一种语言的实现,然后你用这种语言编写一个程序,你将如何运行这种语言。你必须用另一种现有语言实现一种语言,或者将它硬连接到计算机上