ANTLR学习笔记二:学习使用ANTLRWorks

一、什么是ANTLRWorks

ANTLRWorks属于ANTLR的一部分,不过它需要单独下载。

see

http://www.antlr.org/works/index.html

它包含了ANTLR的jar包内容。

另外,它提供编辑功能,可以独立于诸如Eclipse的IDE工具。

也就是说,如果java代码和语法全写在同一个.g文件内,

就不需要开一个编辑器或者IDE了。(除非需要修改输入文件的内容)

虽然ANTLRWorks是图形界面,

但它充分体现程序员对快速开发和测试驱动的渴求。

毕竟大多数程序员还是比较希望早点看到代码效果的。

 

二、ANTLRWorks的使用、好处和限制

1. 启动

关于它的使用和特性可以参考官方网站的介绍:

http://www.antlr.org/works/index.html

在Windows下,我习惯用批处理启动

@set path=%path%;D:\java\jdk1.6.0_20\bin

@start java -jar antlrworks-1.4.2.jar

作用是把JDK加入PATH,用于编译和调试(JRE无法编译java程序)。

2. 输入文本或文件测试

(1)用菜单打开或新建一个.g文件,然后按子窗口工具栏上的绿色虫子按钮。

ANTLRWorks就会在output子目录生成相关的.java文件并且编译成.class文件。

如果成功,会弹出Input Text对话框,询问测试的输入内容。

按OK后,切换到主窗口的Debugger标签页,

(2)按标签页中工具栏上的"Go To End"(符号有点像录音机的快进)

在Parse Tree窗口就会出现一棵树(根在上,叶在下)

一般这棵树很宽,需要调整下面的Zoom缩放,

或者干脆按右下角的"Display as List"切换成

根在左叶在右的树列表。

如果解析的输入文本的叶很多,建议使用根在左叶在右的树进行检查。

(3)如果要修改.g文件,按Debugger标签页左上角的Stop按钮,

中间的.g文件编辑器就会重新变回可编辑了。

3. .g语法文件的错误检查

(1)ANTLRWorks会在调试前检查.g是否有错误。

(2)如果在Input Text对话框弹出时选择错误的Start Rule(开始符),

Java编译器可能会报错。

(3)在上面提到的输入文本测试中,按"Go To End"可能会造成一个问题:

左面输入只显示全部输入的一部分,

那是因为默认Break on会勾选Consume。

如果出现Consume,输入就会停止,说明.g的语法有问题。

(4)按"Go To End"还可能造成另一个问题:Java程序抛异常。

这种情况需要切换到Output(在Debugger标签页下方)

(5)如果在Input Text对话框弹出时选择File,需要注意代码页问题。

ANTLRWorks不同于ANTLR的代码生成,它多生成了一个叫__Test__.java文件。

这个文件最开始会创建一个文件流,例如这样:

new ANTLRFileStream("XXX\\XXX.txt", "UTF8");

所以,如果输入文件不是UTF8(不带BOM),而且带中文的话,

用Go To End测试的结果会有问题(ANTLR3希望把一个中文字视为一个字符)。

4. ANTLRWorks的问题和限制

(1)ANTLRWorks生成的文件无法直接用于应用程序,

因为生成代码中加入了与socket通信相关的代码,只能用于调试。

(2)个人认为,它对Java以外的编程语言支持不够好。

Java版ANTLR支持的特性应该是最多的。

所以在开发前期最好用Java写嵌入动作。

(3)默认只支持UTF8(不带BOM)的输入文件

(4)Input Text对话框弹出比较烦人,

如果需要测试很多输入文件,这种方式也很累人。

(5)有时会出现一些莫名奇妙的运行错误,

需要删除output目录下的文件后重新调试。

(6)个人觉得它只适合单一.g文件的编写和调试。

 

三、结论

ANTLRWorks是使用antlr的短兵器,逆向推导语法的利器。


你可能感兴趣的:(antlr)