我跟我的朋友讨论,并意识到这可能会问这个问题的最佳地点?
一种新的语言是如何诞生的? 这种新的语言NEW必须在一些老的语言OLD(如C ++是用C编写的初始阶段)写入,或者这是怎么创建? 而且,请问这种语言可以新作品本身,如果没有编译器呢? 因此,必须有一些编译器呢? 谁对写入编译器?
那么,如何做这一切工作在一起,新的语言和编译它,新的语言的关系,其老根据地的语言?
我跟我的朋友讨论,并意识到这可能会问这个问题的最佳地点?
一种新的语言是如何诞生的? 这种新的语言NEW必须在一些老的语言OLD(如C ++是用C编写的初始阶段)写入,或者这是怎么创建? 而且,请问这种语言可以新作品本身,如果没有编译器呢? 因此,必须有一些编译器呢? 谁对写入编译器?
那么,如何做这一切工作在一起,新的语言和编译它,新的语言的关系,其老根据地的语言?
你写在实现语言,直到编译器可以开始编译足够的新的语言的使用来实现新的语言的其余部分的编译器。
这就是它是如何工作的。
编辑:我想弄清楚,在这个答案的评论者也正确。 除非你想编译器并没有在新的语言编写。 至于说,一些不走这条路,保持与原来的实现语言。
自举是在计算机科学中用来描述参与撰写的,它旨在编译目标编程语言的编译器(或汇编语言)技术的术语。 这种技术也被称为自托管。
您可能要在编程语言设计和编译器设计阅读起来:
http://dragonbook.stanford.edu/
自举(编译)
http://en.wikipedia.org/wiki/Programming_language
http://www.paulgraham.com/langdes.html
或者,采取一门课程或三个在当地的大学。
任何语言的心脏是连接器和编译器,源代码转换成中介编译器,非常接近机器代码,代码。 从这点,接头被用来将其连接到其它的二进制文件如库等二进制文件被链接到所有逻辑块后,将它们成为机器代码(或平移中间代码的可执行文件,因为它与.NET /爪哇)。
从最翻译“人”的英语发生在编译器中,有关于如何做到这一点大文章......但大多数的这是超自然的境界,按要求组织能力写一个工作的编译器是巨大的。
你可以看到液面各种各样的翻译,并通过观察语言定义得到的编译器是如何工作细看(Bjarne的Stroustrup的“C ++程序设计语言”,微软出版社的“C#编程语言”),其中两个附录和整个充塞是词汇件,或者编译器将使用在一个非常合理的方式转换你的话成机器代码的规则。
我强烈建议你阅读你喜欢的编程语言的语言定义,如果你想了解更多,也对编译器的维基百科文章会给你一个更广泛的理解。
问得好!
有时,新语言编译器是写在一个古老的语言。
如果新的语言n中的编译器是用N,有很多策略,都牵扯找到某种方式在语言ň运行程序,当你还没有一个编译器。
编写语言为N的解释 ,说在C(真的是你所选择的语言),然后用解释来解释编译器在编译本身。
写n的真正可怕的编译器,说,在C,然后用它来编译,编译器的第一个版本。
编译的编译器的第一版本到汇编代码或C代码,通常由手。
我最喜欢的是战略#1,但他们所有的工作。
如果你想看到一个解决这个问题的深入剖析,看看安德鲁阿佩尔的短纸公理引导过程:一个指南的编译器黑客 ,这是免费的,从普林斯顿大学网站。 本文是非常的数学,但在相关工作中您可以查找到旧的文件,包括那些显示了使用T-图,其中很多人觉得非常直观的引导过程的引用。
语言是(一般)只是一个规范。 语言的编译器或解释器可被写在你选择的任何语言。 第一次是在机器代码,因为这就是我们了。 自那时以来,C(和C ++)仍然流行的选择对语言的实现然后是汇编器,那么其他语言如C.。 C和C ++是注意唯一的选择,但是。
另外值得指出的是,往往一个语言可以用专门的语言(或语言),如YACC和lex实现。 这些都是专门设计,可以很容易地创建一个基于规范的编译器领域特定语言。 这需要工作带出了手工编码的东西很多,可以很容易地通过计算机生成。 你把规范,通过这些工具运行它时,突然迸出来实现你的语言的代码。 YACC代表另一个编译,编译器。 它编译规范编译器,并生成一个编译器。
其他海报建议,一旦语言是足够强大的编译器可以移植到自身,但这是没有必要的。 许多语言都用C写一个十年或更长时间以前,今天继续在C来实现。