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 ...
随机推荐
- ComboBox绑定
this.ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; this.ComboBox1.AutoCompleteSource ...
- hihocoder 1138 Islands Travel dijkstra+heap 难度:2
http://hihocoder.com/problemset/problem/1138 很久不用最短路,几乎连基本性质也忘了,结果这道题就是某些最短路算法空间复杂度是o(n) 这里总结四种算法 算法 ...
- 一模 (3) day2
第一题: 题目大意:和day1一样,给出m个小于n的数,求出出现次数大于m div 2 的数. 数据范围加大,1<=n<=2^31 1<=m<=3000000 解题过程: ...
- SA 的参数
SA 的参数也只能是常数数组. http://www.cnblogs.com/del/archive/2009/10/27/1590692.html ja := SA([]); jo := SO(); ...
- Andoid activity 生命周期
今天介绍一下Android中最常用的组件activity的生命周期.当activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理.当前活动的Activi ...
- CentOS SSH配置
默认CentOS已经安装了OpenSSH,即使你是最小化安装也是如此.所以这里就不介绍OpenSSH的安装了. SSH配置: 1.修改vi /etc/ssh/sshd_config,根据模板将要修改的 ...
- goldengate 12c 针对oracle 12c配置的主要变化
由于oracle 12c已经是多租户架构,在使用OGG同步的时候,需要考虑下面一些情况 一个 CDB包含多个PDB,源端部署的一个extract可访问所有pdb redo,理论上不需要每个pdb单独配 ...
- ARC以及MRC中setter方法
ARC以及MRC中setter方法的差异 有时候,你会需要重写setter或者getter方法,你知道么,ARC与MRC的setter方法是有着差异的呢. 先看下MRC下的setter方法: 在看下A ...
- (转)iOS消息推送机制的实现
原:http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html iOS消息推送机制的实现 iOS消息推送的工作机制可以简单的用下 ...
- BZOJ 3251 树上三角形
NOIP的东西回成都再说吧... 这题暴力. #include<iostream> #include<cstdio> #include<cstring> #incl ...