前言
学习框架或第三方库的方法是什么
(1)少量的浏览manual或tutoral,只关注程序所需的特征,再完善其详细内容和特征的认识?
(2)花大量的时间研究详细内容,再考虑程序实现?
这是个先有鸡还是先有蛋的问题,因这是私底下的项目,我倾向于后者。
当前已对ANTLR文法有了一些了解,这篇是概览性知识的最后一部分。
初步将ANTLR的涉及的面向应用的内容划分了一下:
[1]文法:lexer, parser, tree parser
[2]动作和属性
[3]内部表示:AST
[4]模板语言StringTemplate
[5]错误报告和恢复
[7]谓词:句法谓词和语义谓词
内容
antlrworks常见用法
ANTLR文法级选项
1 language option
2 output option
3 backtrack option
4 memoize option
5 tokenVocab option
6 rewrite option
7 superClass option
8 filter option
9 ASTLabelType option
10 TokenLabelType option
antlrworks常见用法
很好的参考URL
1 【记录】尝试使用ANTLRWorks 1.5开发
http://www.crifan.com/try_antlrworks_1_5_development/
2 【已解决】ANTLRWorks 1.5编译代码出错:Compiler failed with result code 1
http://www.crifan.com/antlrworks_1_5_compiler_failed_with_result_code_1/
选用了antlrworks-1.4.3.jar(URL 2中提供了下载地址)。
打开编辑环境(Java(TM) Platform SE binary)
创建文法或模板
编辑器概览
测试文法(Run->Debug,或ctrl+D),编辑输入
直接识别(Go To End)
观察解析树
计划:记录测试过程中出现的错误。
---------------------------------------------------------------------------------------------------------------------------------------
ANTLR文法级选项
1 language option
language指定ANTLR生成的目标语言。
ANTLR在CLASSPATH下搜索路径org/antlr/codegen/templates/,下有各语言对应的模板。
2 output option
output仅对混合文法有效,生成输出模板(值为template),生成树(值为AST)。
3 backtrack option
backtrack设置为true时,表示ANTLR在静态LL(*)文法分析无法产生确定的决定时应该回溯。
默认为false。
4 memoize option
记录部分解析结果,以保证回溯时解析器不会对同一输入用同一规则解析超过一次。
默认为false。
5 tokenVocab option
指定ANTLR应该获得预定义的token和token类型。
常在一个文法需要另一个文法的token类型时使用,典型的例子是树文法使用解析文法产生其书生成的token和token类型。
默认不使用。
6 rewrite option
与output=template一起使用,在输入源本地修改。
7 superClass option
指定生成的识别器的超类。
根据不同的文法,默认为Lexer, Parse, TreeParse。
8 filter option
仅用于lexer。
按lexer规则顺序寻找匹配,消费输入中字符直至找到匹配的规则。
默认值为false。
9 ASTLabelType option
设置tree标签和值为tree的表达式(tree-valued expression)在目标语言中的类型。
Java中默认值为Object。
10 TokenLabelType option
设置token标签和值为token的表达式在目标语言中的类型。
Java中默认值为Token。
5.11 k option
向前看token数量。
默认值为*。