ANTLR3完全参考指南读书笔记[03]
grammarType grammar name; <<optionSpec>> <<tokenSpec>> <<attributeScopes>> <<actions>> rule1 : ...|...|...; rule2 : ...|...|...;
文法词汇
access-modifier rule-name[<<arguments>>] returns [<<return-values>>] <<throws-spec>> <<options-spec>> <<rule-attribute-scopes>> <<rule-actions>> : <<alternative-1>> -> <<rewrite-rule-1>> | <<alternative-2>> -> <<rewrite-rule-2>> ... | <<alternative-n>> -> <<rewrite-rule-n>> ; <<exception-spec>>
x?
x+
rule returns [int n] @init { $n =0; // init return value } @after { System.out.println("n=" + $n); } : ID {$n=23;} | WS {$n=24;} ;
规则参数和返回值
rule2[int a, String b] returns [int c, String d] : ID {$c=$a; $d=$b;} ;
rule3 : v=rule2[3, "test"] {System.out.println($v.d);} ;
method @scope { String name; } : 'void' ID {$method::name = $ID.text;} '(' args ')' body ;
unaryID : '-' ID -> ^('-' ID); classDefinition : 'class' ID ('extends' sup=typename)? ('implements' i+=typename (',' i+=typename)*)? '{' (varibaleDefinition|methodDefinition|ctorDefinition)* '}' -> ^('class' ID ^('extends' $sup)? ^('implements' $i+)? varibaleDefinition* methodDefinition* ctorDefinition*);
rule_with_exception : expr_temp ; catch[FailedPredicateException e] {;} catch[RecognitionException e] {;} finally {;}
stat : (decl)=> decl ';' | expr ';' | 'return' expr ';' | 'break' ';' ;
stat options{backtrack=true;} : decl ';' | 'return' expr ';' | 'break' ';' | expr ';' ;
UNICODE_CHAR : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT; fragment HEX_DIGIT : '0'..'9'|'a'..'f'|'A'..'F';
fragment CODE[boolean stripCurlies] : '{' CODE[stripCurlies] | ~('{'|'}')* '}' { if(stripCurlies) { setText(getText().subString(1, getText().length())); } } ;
WS : (' '|'\t'|'\n'|'\r')+ {$channel=HIDDEN;};
WS : (' '|'\t'|'\n'|'\r')+ {skip();};
tokens{ VARDEF; MOD='%'; } var : type ID ';' -> ^(VARDEF type ID); expr : INT (MOD INT)*;
scope SymbolScope { List symbols; } classDefinition scope SymbolScope; : 'class' ID ('extends' sup=typename)? ('implements' i+=typename (',' i+=typename)*)? '{' (varibaleDefinition|methodDefinition|ctorDefinition)* '}' -> ^('class' ID ^('extends' $sup)? ^('implements' $i+)? varibaleDefinition* methodDefinition* ctorDefinition*) ; methodDefinition scope SymbolScope; : WS ;
ANTLR3完全参考指南读书笔记[03]的更多相关文章
- ANTLR3完全参考指南读书笔记[01]
引用 Terence Parr. The Definitive ANTLR Reference, Building Domain Specific Languages(antlr3 version). ...
- ANTLR3完全参考指南读书笔记[06]
前言 这段时间在公司忙的跟狗似的,但忙的是没多少技术含量的活儿. 终于将AST IR和tree grammar过了一遍,计划明天写完这部分的读书笔记. 内容 1 内部表示AST构建 2 树文法 ...
- ANTLR3完全参考指南读书笔记[02]
前言 程序语言是什么? 用wiki上的描述,程序语言是一种人工设计的语言,用于通过指令与机器交互:程序语言是编程程序的标记,而程序是一种计算或算法的描述.详细介绍和背景信息参考: Programmin ...
- ANTLR3完全参考指南读书笔记[08]
前言 不要让用户被那些“专业术语”吓住! 用心设计的提示和反馈信息是软件设计者的“职业良心”. 内容 1 存在哪些错误? 2 美化错误提示 3 错误恢复策略 1 存在哪些错误? 在DSL语言开 ...
- ANTLR3完全参考指南读书笔记[07]
前言 真正意义上的程序员都很懒,懒的连多余的一行代码也不写. 如果能将底层满手油污的活儿都可以交给别人去做,自己就扮演个智囊团成员的角色,生活会比想象中的还要惬意. 严格的按照指令执行长时间不知疲倦的 ...
- ANTLR3完全参考指南读书笔记[05]
前言 仅生成给出true/false的识别器是没有多大用处的,自然的就有在识别过程中遇到某一结构时执行一段代码.存储该结构中信息的想法. ANTLR提供了在文法中嵌入属性和动作超级混合“文法”,可以生 ...
- ANTLR3完全参考指南读书笔记[04]
前言 学习框架或第三方库的方法是什么 (1)少量的浏览manual或tutoral,只关注程序所需的特征,再完善其详细内容和特征的认识? (2)花大量的时间研究详细内容,再考虑程序实现? 这是个先有鸡 ...
- HTTP权威指南读书笔记
HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...
- css权威指南读书笔记
今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...
随机推荐
- php 加密解密字符串
/********************************************************************* 函数名称:encrypt 函数作用:加密解密字符串 使用方 ...
- 走进AngularJs(七) 过滤器(filter) - 吕大豹
时间 2013-12-15 16:22:00 博客园-原创精华区 原文 http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器 ...
- C++封装库
1.新建项目 -> Win32项目 选择DLL , 勾选 空项目 , 点击完成. 2.本例程,使用一个CPP文件 , 及一个头文件. 其中头文件包含函数声明,CPP文件实现函数声明. 3. ...
- 【STL】-迭代器的用法
初始化: list<char>::iterator pos; 算法: 1. 遍历 for(pos = col1.begin(); pos != col1.end(); ++pos){... ...
- Hibernate对象映射类型
Hibernate understands both the Java and JDBC representations of application data. The ability to rea ...
- jpcap
1.System.out.println( System.getProperty("java.library.path")); 2.将jpcap.dll放到上边打印的路径中
- JDBC Thin Driver 的formats三种格式
格式一: Oracle JDBC Thin using a ServiceName: jdbc:oracle:thin:@//<host>:<port>/<servic ...
- [处理器、单片机]ARM
1.ARM简介: ARM是Advanced RISC Machines的缩写.1985年4月26日,第一个ARM原型在英国剑桥的Acorn计算机有限公司诞生,由美国加州San Jose VLSI技术公 ...
- poj1141 区间dp+路径
//Accepted 176 KB 47 ms //感谢大神们为我们这群渣渣铺平前进的道路!! //用scanf("%s",s)!=EOF WA到死 #include <cs ...
- Canopy测试IPython控制台输出
Canopy测试IPython控制台输出