相关疑难解决方法(0)

学习编写一个编译器

首选语言:C/C++,Java和Ruby.

我正在寻找一些有用的书籍/教程,如何编写自己的编译器只是为了教育目的.我最熟悉C/C++,Java和Ruby,所以我更喜欢涉及这三者之一的资源,但任何好的资源都是可以接受的.

language-agnostic compiler-construction

699
推荐指数
29
解决办法
29万
查看次数

用自己的语言编写编译器

直观地说,似乎语言的编译器Foo本身不能用Foo编写.更具体地说,语言的第一个编译器Foo不能用Foo编写,但可以编写任何后续的编译器Foo.

但这是真的吗?我对一种语言的阅读非常模糊,这种语言的第一个编译器是用"本身"编写的.这是可能的,如果是这样的话怎么样?

compiler-construction bootstrapping

196
推荐指数
7
解决办法
4万
查看次数

引导仍然需要外部支持

我听说过引导一种语言的想法,就是为这种语言编写一个编译器/解释器.我想知道如何实现这一点,并且看了一下,看到有人说它只能通过其中任何一个来完成

  • 用不同的语言编写初始编译器.
  • 在Assembly中手动编写初始编译器,这似乎是第一个特例

对我来说,这些似乎都不是真正引导语言,因为它们都需要外部支持.有没有办法用自己的语言编写编译器?

compiler-construction bootstrapping

93
推荐指数
6
解决办法
2万
查看次数

引导编译器:为什么?

我理解一种语言是如何自我引导的,但是我还没有找到很多关于为什么要考虑引导的参考.

直观的答案是您正在编写的语言提供了编译器的"基础"语言中找不到的实用程序,并且语言的功能相对非常适合编译器.

例如,引导C++编译器是有意义的 - 在正确使用OOP时,维护编译器可能要容易得多,而不是使用普通的C语言.

另一方面,MATLAB确实使矩阵数学比普通C容易得多,但我在MATLAB中编写MATLAB编译器/解释器时看不出任何明显的好处 - 看起来它的可维护性会降低.类似的视图可以应用于R编程语言.或者一个非常极端的例子是引导Whitespace,它是用Haskell编写的 - 绝对是一个巨大的超级空白集.

引导的唯一原因是利用新语言的功能吗?我知道还有"因为我们可以"的理由,但那不是我想要的:)

theory compiler-construction bootstrapping

30
推荐指数
5
解决办法
9838
查看次数

你如何为该语言的语言编写编译器?

可能的重复:
如何用该语言编写语言的编译器?
在"本身"中实现编译器

我在看Rubinius,这是一个使用Ruby编写的编译器编译成字节码的Ruby实现.我无法理解这一点.你如何编写语言本身的语言编译器?似乎只是文本没有任何东西可以将它编译成可执行文件,然后可以编译用Ruby编写的未来代码.我只是输入那句话感到困惑.有人可以帮忙解释一下吗?

ruby compiler-construction bootstrapping rubinius

11
推荐指数
1
解决办法
1915
查看次数