基本上,它首先是梦想...... 有一天我可能会拥有自己的编程语言!,但很快就会变成一场噩梦,就在你找到如何构建之后编译器?。
我花了太多时间,像大多数人一样,阅读龙书以及许多其他文章,资源,论坛和Q& A。我最终提出的是大量了解许多不必要的东西,如所有主要的解析技术甚至编译器优化但仍然没有清楚地了解什么我需要最终完成我的编译器项目。
问题在于你需要一次又一次地理解(并掌握)整个事物的所有书籍和其他资源!您需要了解并实现解析器,而您仍然不知道接下来应该做什么。顺便说一句,我认为你是这个话题的真正初学者,但我知道对你来说并非如此。
有一天,我停止阅读这些材料。我说这足以了解每一个细节,我想做一些真实的事情。所以,我开始问这样的问题:编译器的目标是什么?好吧,我的回答是为处理器生成可理解的二进制代码。所以,我说那应该是怎么回事?好吧,像这样statement1; statement2;
到0xAABBCCDD
,就是这样。
然后我从头开始一切。我从最简单的语法和机器代码开始。我在一天结束时得到的是一个能够为英特尔生成纯二进制代码的工作编译器。它只理解一些指令,但它是一个真正有效的编译器,但是非常简单。
后来我改进了解析器等等,从那时起我感到非常高兴。现在,我在需要时使用所有这些材料。我的问题是我一直在努力去理解和掌握一切,因为我认为(大多数人都说过)我不能编写一个编译器,即使是一个简单的编译器,也不会阅读所有这些书和文章。
在这里,我想请您列出在开始任何编译器项目之前您认为必须知道的想法和概念。您认为它们简单的东西足以让初学者阅读和理解,更好地描绘整个项目,并继续编写实际代码并感受真正的编译器是如何工作的。
作为一个例子,请看我的答案!
P.S。顺便说一句,在你投票之前,让我再次明确表示我并不是说这些材料不好。我只是说这个主题非常模糊。错误的方法是立刻去做所有事情。更智能的解决方案是从 Hello World!示例开始,而不是与GCC具有相同功能的项目等。
答案 0 :(得分:2)
最重要的是要了解 Processor 的工作原理。您首先需要选择一个特定的目标,但是您可以在以后扩展它。制造商的文档也会对您有所帮助。
预热视频
<强>文章强>
答案 1 :(得分:0)
flex和bison手册给出了编写基本解释器的一些非常简单的示例:
我可以分别使用“info flex”和“info bison”命令在本地计算机上访问这两个命令。
编辑:刚看到并认为我会将此答案分享到类似的问题:https://stackoverflow.com/a/15743032/1003855