最近打算重做以前的一个留下遗憾的工作,当中的一项小任务就是要求编写一个简易SQL语言的语法分析器。
本科的《编译原理》课程依稀在我脑中留下些许映象。当初的课程大作业是写一个叫Dicuf(貌似是这么发音)的编译器,在万恶的助教的鞭策下,我们使用了Lex和Yacc成功逃离了恐怖之狱。现在又要拾起编译来,还是有些挑战性的。
善其事,利其器。在网络上一番东游西逛,我对于时兴的一些语法分析器自动生成工具有了点了解。现总结如下,以资参考。
它生于Unix,是最经典的词法\语法分析器,是经典教材中的示例御用工具。现在它也支持在Windows上生成(安装环境),然而其所生成语法分析器的语言仅有C语言。
与前者类似,Bison与Yacc有很高的兼容性。生成语言为C、C++和Java。
较早的一个语法分析器生成工具。其生成语法分析器的语言极其之多,包括C#、 Java、 C++、F#、VB.Net、Oberon等等。
作为翻译程序的一部分,你可以使用简单的操作符和动作来参数化你的文法,使之告诉ANTLR怎样去创建抽象语法树(AST)和怎样产生输出。ANTLR知道怎样去生成识别程序,生成语法分析器的语言包括Java,C++,C#. 语法有点麻烦。
它是一个较为复杂的分析器,支持语言貌似最多。生成语言包括(官网说的):Assembly - Intel x86 、ANSI C、C#、D、Delphi、Java、Pascal、Python、Visual Basic、Visual Basic .NET、Visual C++、所有.NET语言、所有ActiveX语言。难以想象这居然是个免费的软件。
这是一个C#和Java的语法剖析器生成器(Parser Generator或叫作编译器的编译器:Compiler Complier) 。它相对于其它一些类似的工具如yacc和ANTLR有了更好的改进。这是因为Grammatica:
1.创建了更好的注释和易读的源代码.
2.拥有错误自动恢复并能够详述错误信息.
3.支持语法/词法测试与调试.
它是用JAVA开发的最受欢迎的语法分析生成器之一。它还提供JJTree等工具来帮助我们建立语法树。它还有一个用于辅助JavaCC应用程序开发的Eclipse插件.生成语法分析器语言为java。
还有很多语法分析器生成工具,比如JFlex、SableC、Beaver、JTopas、Runcc、CUP、SJPT、Chaperon。但我实在是没精力一一介绍了,之前实在没想到这工具如此繁多。
最后我选择了Grammatica,因为我需要C#语言的语法分析器,而且要求足够简单:)
我利用Grammatica的一个示例生成了一个C#的语法分析器,并移植到Silverlight项目上(由于另一个项目需要),目前运行良好。由于.Net与Silverlight.Net非常相像,这个移植工作比想象中要容易。不过,我不太赞成将语法分析器放到Web上,这样会使客户端明显增大,一种可以考虑的做法就是将用于验证功能的语法分析器封装成Web服务放到服务器端。
联系客服