我需要一些资源才能开始(我是一名学生)
答案 0 :(得分:9)
答案在这里可能非常主观。但是如果你想编写解析器,我建议使用ANTLR。目前,ANTLR支持C,C#,ActionScript,JavaScript和Java目标。根据我的经验,Java版本使用起来非常稳定,并且已经在许多强大的开源项目中使用,即Drools和Hibernate。
答案 1 :(得分:7)
答案 2 :(得分:4)
解析器和编译器是两个独立的问题。例如,我可能在C中编写一个编译器,但我永远不会在C中编写解析器(我会使用解析器生成器)。对于速度不是高优先级的非常简单的解析器,我可以手动编写Perl或Python中的解析器,它们具有良好的文本操作功能。但是对于除了非常基本的解析器之外的任何东西,我会使用某种解析器生成工具。最常用的是ANTLR,Coco/R和Lex/Yacc以及GNU实现Flex / Bison。我个人的偏好是Coco / R,但是现在ANTLR似乎更受欢迎。
如果您正在编写通用编程语言,您可能需要考虑自己编写它。这有很多好处,包括可移植性(人们只需要移植语言的第一个版本)和功能演示(解析是一个难题,所以如果它可以用您的语言完成,这可以证明您的语言)。如果您的语言被解释,这可能不适合性能原因。
答案 3 :(得分:3)
您需要查看解析器生成器。如果你是CS学生,那么你可能想看看龙书:http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools。
使用C#或Java构建解析器可能是最简单的,因为您不必担心内存管理等问题,并且可以专注于语法。
一个好的C#解析器生成器是GPPG:http://plas.fit.qut.edu.au/gppg/。
答案 4 :(得分:2)
Lisp / Scheme是我们在uni中使用的任务。
他们很好地完成了这项任务。
丹
答案 5 :(得分:2)
虽然我曾经有一本名为“Java中的现代编译器实现”的教科书,但我认为专业人士仍然使用C.而不是证明他们的语言能够自行编译。
答案 6 :(得分:1)
如果从头开始实现编译器,大多数编程语言都可以胜任。 (我甚至知道用Fortran IV和COBOL编写的编译器/解析器,但我不建议尝试这样做!)
但是如果您尝试实现的语言甚至具有非平凡的语法,那么使用词法生成器和/或解析器生成器来实现前端会更好。您将获得更快,更可靠的解析器。
因此,在此基础上,合适的编程语言可以使用合适的解析器生成器。 Wikipedia上有一个页面,用于比较大量的解析器生成器。我没有意识到有那么多!
答案 7 :(得分:1)
如果您的目标是学习解析器(和标记器)背后的技术,那么最好自己从头开始编写一个。您可以在大多数编程语言中执行此操作,因此您可以选择一个您熟悉的语言。
前段时间,我写了一系列博客文章,展示了在C#中编写一个类似于简单的基于BASIC的编程语言的解析器是多么容易。我不想在这里发送垃圾邮件,因此我不会提供直接链接,但如果您访问博客(请参阅我的个人资料)并转到底部,您可以在“我的帖子”中找到“编写解析器”链接“-section。
答案 8 :(得分:0)
您是否想为通用语言编写解析器?在这种情况下,显然建议使用目标语言编写(和引导)。你应该吃自己的狗食。