基本上,这首先是一个梦想……有一天我可能拥有自己的编程语言!,但它很快就会变成一场噩梦,就在你寻找如何构建编译器?.
像你们大多数人一样,我花了太多时间阅读龙书以及许多其他文章、资源、论坛和问答。我最终想到的是大量了解许多不必要的东西,例如所有主要的解析技术甚至编译器优化,但仍然不清楚我最终需要用我的编译器项目做什么。
问题在于你需要从一开始就理解(和掌握)整个事情的所有书籍和其他资源!您需要理解和实现解析器,而您仍然不知道接下来应该做什么。顺便说一句,我假设您是该主题的真正初学者,但是我知道对于某些人来说并非如此。
总有一天我会停止阅读这些材料。我说了解每一个细节就足够了,我想做一些真实的事情。所以,我开始问这样的问题:编译器的目标是什么?好吧,我的答案是为处理器生成可理解的二进制代码。所以,我说那应该怎么样?好吧,类似这样的事情,仅此statement1; statement2;
而已0xAABBCCDD
。
然后我从头开始一切。我从最简单的语法和机器代码开始。我最终拥有的是一个能够为英特尔生成纯二进制代码的工作编译器。它只理解一些指令,但它是一个真正的工作编译器,但是一个非常简单的编译器。
后来我改进了解析器等,从那以后我感觉更快乐了。现在,我在需要时使用所有这些材料。我的问题是我非常努力地理解和掌握一切,因为我认为(大多数人都说)如果不阅读所有这些书籍和文章,我就无法制作编译器,即使是简单的编译器。
在这里,我想请您列出在开始任何编译器项目之前您认为有必要了解的想法和概念。你认为它们足够简单,初学者可以阅读和理解,更好地描绘整个项目,然后继续编写实际代码并感受真正的编译器是如何工作的。
作为一个例子,请参见我的答案!
PS 顺便说一句,在你否决这个问题之前,让我再次澄清一下,我并不是说这些材料不好。我只是说这个主题非常模糊。错误的方法是一次完成所有事情。更智能的解决方案是从Hello World 开始!例如,而不是与 GCC 等具有相同功能的项目。