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' ';' ;
//文法名称为T_template
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 ...
随机推荐
- POJ 1573 Robot Motion 模拟 难度:0
#define ONLINE_JUDGE #include<cstdio> #include <cstring> #include <algorithm> usin ...
- iOS解决两个静态库的冲突 duplicate symbol
http://blog.163.com/023_dns/blog/static/118727366201391544630380/ 场景: 解决TencentOpenAPI.framework与Zba ...
- HDU 3966 基础树链剖分
题意:给一棵树,并给定各个点权的值,然后有3种操作:I C1 C2 K: 把C1与C2的路径上的所有点权值加上KD C1 C2 K:把C1与C2的路径上的所有点权值减去KQ C:查询节点编号为C的权值 ...
- linux下的powershell,pash试用手记
------1 概述------ 1.1 简单来说linux,unix是非常依赖脚本的,而win不是.win中有很多图形程序+c库,效率不比脚本差.点几下鼠标照样能完成需求.当 然,图形和字符是两码事 ...
- 推荐一款作图神器:ProcessOn
本人近日发现一款作图神器:ProcessOn 它是一款在线的作图工具,完全国产,前台是用HTML5 Canvas加javascript做绘图,后台用java实现数据处理和图片生成, 整站UI基本类似 ...
- SharePoint 沙盒解决方案 VS 场解决方案
博客地址 http://blog.csdn.net/foxdave 最近看书正好看到了关于沙盒解决方案的介绍,便整理记录一下. 虽然沙盒解决方案已经在最新的SharePoint开发中被否决弃用了(被A ...
- C# MP3文件属性读取
using (TempFile tempFile = new TempFile()) { using (FileStream fs = new FileStream(tempFile.FileName ...
- (二)iOS如何把所有界面的状态栏的字体颜色都设置为白色
第一步:在info.plist中添加一个字段:view controller -base status bar 设置为NO 第二步:在一个所有界面都继承的父类里添加: if (IOS7_OR_LATE ...
- Android布局文件layout.xml的一些属性值
第一类:属性值 true或者 false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 andr ...
- javascript笔记3-面向对象的程序设计-创建对象
javascript的对象:无序属性的集合,而每个属性可以包含基本值.对象或者函数.举例: var person = new Object(); person.name = "Nichola ...