1. 对语法框架结构的整体构思
一方面为了避免过多因素的干扰,另一方面考虑迭代完善过程,在对语法的整体构思时不要考虑语法树的结构,以及如何构造语法树的问题。
2. 采用自底向上的方法
因为这样可以结合ANTLRWorks一步步测试,在Interpreter窗口选择要测试的规则就可以进行。
例如下面图中的NoViableAltException表示这个表达式无法解析
自底向上时对每一个规则最好能够充分的考虑到各种需要处理的情况,并用ANTLRWorks测试验证。每编写好一个规则,最好能用自顶向下、最左推导的思维方式进行Review,尝试找出有可能破坏这种推导方式的情况。因为越往上,出现问题,尤其是不符合LL(*)时,越难找出原因。
词法规则比较重要,好的词法规则定义可以使语法规则简化。
3. 善用ANTLRWorks
3.1 便利的编辑功能
Ctrl+B: 转到规则的定义处
Ctrl+Shift+B: 查找规则,能按当前输入字符过滤
Ctrl+Alt+left, Ctrl+Alt+right: 前进、后退
Ctrl+R: 检查语法
3.2 排错,例如Decision can match input such as "..." using multiple alternatives
说明语法规则不符合LL(*),不大熟练的情况下,对复杂的语法定位这个问题比较困难,ANTLRWorks提供了一些信息帮助我们解决这样的问题
首先进行语法检查之后如果出现这样的提示,在左上角的规则列表窗口中,有问题的规则会红色字体显示,鼠标移上去会有一些提示信息(在Console窗口中有显示这些信息)
选择一个有问题的规则,在Syntax Diagram窗口可以看到各个存在冲突的推导路径,勾选右下角的Show NFA可以从NFA视图来查看这些推导路径
这些推导路径有助于我们找出Non-LL(*)语法,解决这样的问题需要熟练的技巧
4. 语法树的构造
语法树的结构服务于它的目的,所以应用中怎样使用方便,就应当怎样构造语法树,而不是依赖于ANTLR的*.g语法文件,也不要太过于受ANTLR AST的构造。所以,设计语法树时先不要考虑ANTLR AST构造。
使用ANTLR构造语法树时,先充分了解ANTLR提供的各种AST构造方法,灵活运用。
通过ANTLR Runtime的dll文件,弄明白IToken、ITree、ITreeAdapter的原理和职责,结合ANTLR生成的**Parser.cs文件,弄明白整个构造过程,这样除了在语法文件中使用AST Construction之外,还可以基于ITree、ITreeAdapter来控制语法树的构造过程
- 浏览: 159663 次
- 性别:
- 来自: 北京
最新评论
-
西巴拉古呀那:
Linux多线程并发服务器编程(线程池,FTP服务器)网盘地址 ...
多线程服务器的适用场合 -
somefuture:
第四题怎麼用位图法。写了半天没出来,用了下面的,速度很快pri ...
位图法应用 -
寂寞秋江:
系统,全面,条理清晰,由浅入深,简直是集大成之作。 特别是最后 ...
单个进程最大线程数 -
darkjune:
有点意思, 不错
单个进程最大线程数 -
kidding87:
谢谢啦,收藏着
google使用一点敲门分享
相关推荐
赠送jar包:antlr-runtime-3.4.jar; 赠送原API文档:antlr-runtime-3.4-javadoc.jar; 赠送源代码:antlr-runtime-3.4-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.4.pom; 包含翻译后的API文档:antlr-...
赠送jar包:antlr-runtime-3.5.jar; 赠送原API文档:antlr-runtime-3.5-javadoc.jar; 赠送源代码:antlr-runtime-3.5-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.5.pom; 包含翻译后的API文档:antlr-...
赠送jar包:antlr-runtime-3.5.2.jar; 赠送原API文档:antlr-runtime-3.5.2-javadoc.jar; 赠送源代码:antlr-runtime-3.5.2-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.5.2.pom; 包含翻译后的API文档...
标题“antlr-python-runtime-3.1.3.zip”表明这是一个包含ANTLR Python运行时库的压缩文件,版本为3.1.3。这个版本可能相对较旧,但仍然对理解ANTLR如何与Python集成具有参考价值。 描述中的“antlr-python-runtime...
antlr-4.8-complete.jar
对于下载的"antlr-intellij-plugin-v4-1.14.zip"文件,它是2020年版本的ANTLR Intellij Plugin v4.14的备份。这意味着它可以安装到IntelliJ IDEA中,为用户提供ANTLR 4的支持。安装步骤通常包括解压缩文件,将解压后...
antlr-3.5.2-complete.jar
赠送jar包:antlr4-runtime-4.2.jar; 赠送原API文档:antlr4-runtime-4.2-javadoc.jar; 赠送源代码:antlr4-runtime-4.2-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.2.pom; 包含翻译后的API文档:...
赠送jar包:antlr4-runtime-4.7.jar; 赠送原API文档:antlr4-runtime-4.7-javadoc.jar; 赠送源代码:antlr4-runtime-4.7-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.7.pom; 包含翻译后的API文档:...
antlr-runtime-3.2.jar
官方版本,亲测可用
antlr-runtime-3.0.1开发需要的jar包
`antlr-runtime-3.4.jar.zip` 是ANTLR的一个运行时库的压缩文件,其中包含了ANTLR 3.4版本的运行时组件。这个库主要用于支持由ANTLR生成的解析器在实际应用中的运行。`antlr-runtime` 包含了各种类和接口,这些是...
antlr-4.7-complete.jar运行环境库(java版)
在使用`antlr-runtime-3.1.jar.zip` 进行开发时,首先需要解压缩文件,然后将`antlr-runtime-3.1.jar` 添加到项目的类路径中。如果使用Maven或Gradle等构建工具,可以在`pom.xml`或`build.gradle`文件中配置依赖,...
antlr-3.4-complete-no-antlrv2.jar
赠送jar包:antlr-runtime-3.5.jar; 赠送原API文档:antlr-runtime-3.5-javadoc.jar; 赠送源代码:antlr-runtime-3.5-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.5.pom; 包含翻译后的API文档:antlr-...
在本案例中,我们关注的是`antlr-runtime-3.1.1.jar.zip`文件,它是一个包含ANTLR运行时库的压缩包,版本为3.1.1。 ANTLR的主要功能是生成解析器和词法分析器,这些生成器能够解析符合特定语法规则的输入。ANTLR...
antlr-4.6-complete.jar
赠送jar包:antlr4-runtime-4.7.jar; 赠送原API文档:antlr4-runtime-4.7-javadoc.jar; 赠送源代码:antlr4-runtime-4.7-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.7.pom; 包含翻译后的API文档:...