可能重复:
学习编写编译器
我需要设计一个类似于SQL的虚拟语言,但功能非常有限。我以前从未做过编译器或解析相关的工作。有人能告诉我一个好的起点,比如一个链接或相同的示例吗?我一点头绪都没有。
我将使用C/C++作为我的主要语言来使用这个虚拟语言。
谢谢
可能重复:
学习编写编译器
我需要设计一个类似于SQL的虚拟语言,但功能非常有限。我以前从未做过编译器或解析相关的工作。有人能告诉我一个好的起点,比如一个链接或相同的示例吗?我一点头绪都没有。
我将使用C/C++作为我的主要语言来使用这个虚拟语言。
谢谢
所以你想设计一种新的语言,为它构建一个解析器,然后将结果转换为SQL调用。
在设计语言时,你需要选择最强大、最易于使用的解析器生成器来测试你的语法,因为你会经常进行更改。如果你选择了一个弱的解析器生成器,你可能会发现自己花费更多的精力来重新塑造语法,以使解析器生成器工具满意,而不是考虑什么语法是有意义的。
但是一旦拥有了一个定义良好、可解析的语言,你会发现还有很多超越解析的生命。
在实现语言时,你需要捕获它的内部表示(例如解析树或AST),找到一种方法来分析它的特殊情况,并将其转换为你的输出语言。总的来说,解析器生成器工具在这里并没有帮助你,而这却是问题的难点。而且,构建所有这些额外的东西比大多数人想象的要困难得多。
你实际上想要的是一个集成的工具系统,可以解析、构建AST,分析它们,翻译等等。这样的工具并不多见。我们的 DMS软件重构工具包 提供了所有必要的基础设施。你可能不想真的使用它,但你应该知道这种工具,以便可以自主选择是否亲自完成所有工作。我去年学习了编译器构造课程,我们使用了这本书:
《Compiler Construction》by Kenneth C. Louden
这本书非常详细,具有良好的理论背景。同时,作者提供了足够的例子和使用了非常信息丰富的图表,使您在学习过程中永远不会迷失方向。最终,在后面的章节中列出了一个玩具语言的C编译器。
我真的很喜欢它!