自行编译编程语言


10

我是计算机科学专业的学生。我想创建自己的编程语言(一种基本语言,几乎没有说明)。

我知道如何进行语法分析器,我已经在Perl中做到了。在一篇文章中,我阅读了一些有关编译器的信息,编译器本身就是完成的。

例如,C编译器是用C编写的。这怎么可能?我可以使用自己的语言,但不知道如何执行?任何的想法?

这确实是一个很好的问题,我可以为该项目写博客。


人们已经解释了如何进行引导,但是为什么要这样做?没有理由您不能使用用C,Perl或其他语言编写的编译器来编译语言。当然,最好为自己的语言编写一个编译器,但这会很多工作-您必须至少编写两个编译器才能实现(一个在C / Perl /中,一个在Windows中。你的语言)。
David Richerby

嗯..我想我会用C编写我的第一个编译器,并用我的语言编写第二个。创建一种小的编程语言真的很有趣,我们可以学习很多计算机科学
BaptisteL 2013年

Answers:


13

诀窍是引导。首先,用其他某种语言为您的语言(或其子集)编写一个编译器。然后,使用您的语言为您的语言(或您已经可以处理的很大一部分)编写一个编译器。您使用以前的编译器来编译新的编译器,然后新的编译器可以自己进行编译。


因此,我可以使用C创建我的第一个编译器,而下次使用v1编译我的编译器v2时。但是有一个问题,我怎么能知道编译器没有问题呢?我需要将源代码转换为汇编程序吗?还是其他?
2013年

2
我怎么知道编译器没有问题?一般来说,您编写了一个程序。您怎么知道它没有错误?你不知道 您编写了一些测试,并希望最好。我需要将我的源代码转换为汇编代码吗?当然不。您可以信任C编译器。您在做相同的事情,但是用C(或您选择的任何其他语言)替换了汇编。
Yuval Filmus 2013年

好吧,我必须相信自己的技能^^我想问一下编译器要做的过程。我真的不明白编译器的功能,语法和词法分析器还可以,但是接下来呢?
BaptisteL

然后,您生成代码。如果您不想深入了解生成机器代码的细节,则可以始终使用其他语言(例如C代码)来生成代码,并使用外部编译器将其编译为机器代码。(或者您可以使用解释语言并运行翻译。)
Yuval Filmus 2013年

Hummm不,我喜欢这样:输入我的语言->机器代码。我不想将我的语言转换为另一种语言(与第一次编译相同),可能吗?
2013年

2

可以编译自己的源代码的编译器称为自托管编译器。早期的编译器是用另一种语言编写的。例如,第一个C编译器可能是用汇编器编写的。使用以前的较低级别的编译器的全部技巧称为自举。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.