`

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-2.7.7.jar.zip

    标签:antlr-2.7.7.jar.zip,antlr,2.7.7,jar.zip包下载,依赖包

    The Definitive ANTLR4Reference 学习笔记

    The Definitive ANTLR4Reference 学习笔记 The Definitive ANTLR4Reference 学习笔记

    antlr4-runtime-4.2-API文档-中文版.zip

    Maven坐标:org.antlr:antlr4-runtime:4.2; 标签:antlr、antlr4、runtime、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    antlr4-runtime-4.7-API文档-中文版.zip

    Maven坐标:org.antlr:antlr4-runtime:4.7; 标签:antlr、runtime、antlr4、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    antlrworks-1.5.2-complete.jar

    ANTLRWorks: The ANTLR GUI Development Environment website: http://www.antlr3.org/works/ 双击可运行

    The+Definitive+ANTLR+4+Reference 学习笔记word

    The+Definitive+ANTLR+4+Reference 学习笔记word The+Definitive+ANTLR+4+Reference 学习笔记word

    antlr4-calculator:ANTLR4计算器示例和说明

    该项目使用Java 11,但是如果需要可以在pom.xml进行更改使用Maven安装软件包(请参阅pom.xml ) 这会通过ANTLR4自动生成所需的类要基于语法手动更新/重新生成所需的类,可以让Maven执行antlr4:antlr4命令如何开始...

    antlr4-runtime-4.7-API文档-中英对照版.zip

    Maven坐标:org.antlr:antlr4-runtime:4.7; 标签:antlr、runtime、antlr4、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...

    antlr-2.7.7.jar

    antlr-2.7.7

    antlr-3.5-API文档-中文版.zip

    Maven坐标:org.antlr:antlr:3.5; 标签:antlr、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...

    Antlr2.7&3.3&ANTLRWorks

    由于antlr最新3.3版本只支持C, Objective-C, Ruby, C#, ActionScript, JavaScript, and Java ... 而不能支持c++所以将支持c++的2.7.7版本及最新版本打包在一起(包括代码与程序)并加上最新的ANTLRWorks,以方便使用

    antlr4-tool:具有完整TypeScript支持的有用的Antlr4工具

    antlr4-工具总览该项目的目的和意图是为 JavaScript目标创建并生成Typescript声明文件。 允许生成的具有完整ES5浏览器支持的Antlr解析器和词法分析器。 如果需要,此工具还允许纯JavaScript实现。要求Java Runtime ...

    antlrworks-1.5.1.jar

    使用antlr需要我们提前定义好识别字符流的词法规则和用于解释Token流的语法分析规则。然后,antlr会根据我们提供的语法文件自动生成相应的词法/语法分析器。hive借助Antlr定义SQL的词法规则和语法规则,完成SQL词法...

    antlr4-solidity:优化的antlr4

    具有优化功能的antlr4解析器 antrl4优化 ANTLR 4的优化前叉由Tunnel Vision Laboratories,LLC的Sam Harwell维护。 ANTLR 4的这种“漏洞”实现包含许多功能和性能优化,这些功能和性能优化未包含在参考版本中。 通常...

    gradle-antlr4-plugin:Gradle插件添加了对ANTLR4的支持

    ANTLR4 Gradle插件这是一个Gradle插件,为Gradle添加了对ANTLR4的支持。 我知道已经有一些声称可以做到这一点的插件,但是,我对此并不满意。 现有的插件有一些我想念的功能: 正确放置生成的源文件。 src/main/...

    antlr-3.5-API文档-中英对照版.zip

    Maven坐标:org.antlr:antlr:3.5; 标签:antlr、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    antlr4-calculator:简单的antlr4计算器

    生成ANTLR文件antlr4 Calculator.g4 -no-listener -visitor -o app 复制访客实现cp *.java app 编译javac app/*.java 跑 输入控制台cd app && java Run a = 1+2 b = a^2 c = a + b * (a - 1) a + b + c 结果应...

    antlrcs, ANTLR 3 StringTemplate 3和 StringTemplate 4的C# 端口.zip

    antlrcs, ANTLR 3 StringTemplate 3和 StringTemplate 4的C# 端口 ANTLR 3 C# 目标 这里知识库包含 3个主要项目的C# 版本,其中有些项目具有多个生成构件:ANTLR 3Antlr3: ANTLR 3的代码生成器Antlr3.Runtime: ANTLR...

    antlr4-c3:基于ANTLR4的语法分析器的语法不可知代码完成引擎

    c3引擎能够提供代码完成候选,这对使用ANTLR生成的解析器的编辑者有用,而与生成所使用的实际语言/语法无关。 原始实现以节点模块的形式提供,并以TypeScript编写。 在ports/java下可以找到Java的ports/java 。 与...

    antlr-runtime-3.4-API文档-中文版.zip

    Maven坐标:org.antlr:antlr-runtime:3.4; 标签:antlr、runtime、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

Global site tag (gtag.js) - Google Analytics