【背景】
之前已经可以通过antlrworks 1.4去测试antlr的代码了:
比如这样的代码:
grammar ExprSimple; options { output = AST; ASTLabelType = CommonTree; // type of $stat.tree ref etc... } INT : '0'..'9'+ ; NEWLINE : '\r'? '\n' ; WS : (' '|'\t')+ {skip();} ; prog : stat+ ; stat : expr NEWLINE -> expr ; expr : multExpr (('+'^|'-'^) multExpr)* ; multExpr: atom ('*'^ atom)* ; atom : INT | '('! expr ')'! ;
接下来,就是要去找找,对于antlr v3来说,具体的语法是什么样的。
(注:其中已经知道v3和v4是不一样了:
【总结】使用ANTLR和ANTLRWorks的开发心得和注意事项
此处只需要先学习v3的语法)
尤其是,其中的插入符’^’,和感叹号’!’的含义是啥。
【折腾过程】
1.专门去antlr v3的官网:
(注:v4的官网是:http://www.antlr.org/)
找了半天,基本上,最接近所需要的东西的,也只是:
从文档页面:
http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+documentation
找到的几个:
但是很明显,最多也只是找到部分解释,没有完整的antlr v3的语法的解释。
当然,倒是在:
中可以知道,更多的,关于options,都有哪些,以及含义如何。
2.后来也找到了:
ANTLR-centric Language Glossary
但是看了半天,也还是没有找到语法的解释。
只是普及了一些相关的概念。
其中,以为其所提到的:
中会有这样的语法呢,结果发现也不是。
3.后来还是无意间从:
看到了其所提到的:
meta-language
然后去搜:
antlr meta-language
而找到的:
(不是antlr官网)
以及:
刚才那帖子的更完整的版本:
4.倒是后来也发现了,别人也有同样的需求:
只是没有回答的对而已。
5.参考上面的:
大概总结如下:
ANTLR V3语法
最新整理:2013-01-28
ANTLR Symbols Syntax
Symbol | Description | Example |
(…) | subrule | |
(…)* | 0~∞ closure subrule | |
(…)+ | 1~∞ closure subrule | |
(…)? | 0 or 1 closure subrule | |
{…} | semantic action | (‘ ‘|’\t’)+ {skip();} |
[…] | rule arguments | |
{…}? | semantic predicate | |
(…)=> | syntactic predicate | |
| | alternative operator | ‘+’|’-‘ |
.. | range operator | ‘0’.. ‘9’ |
~ | not operator | |
. | wildcard | |
= | assignment operator | |
: | label operator, rule start | |
; | rule end | INT : ‘0’..’9’+ ; |
<…> | element option | |
class | grammar class | |
extends | specifies grammar base class | |
returns | specifies return type of rule | |
options | options section | |
tokens | tokens section | |
header | header section | |
tokens | token definition section |
其实上述的语法,尤其是限定符方面,其实是和正则表达式的语法,基本一致的。
Production Element Operators
Symbol | Description | Example |
^ | AST root operator | multExpr: atom (‘*’^ atom)* ; |
! | AST exclude operator | atom : INT | ‘(‘! expr ‘)’! ; |
更多的语法,请自行参考:
转载请注明:在路上 » 【整理】ANTLR v3的语法