【整理】ANTLR v3的语法

【背景】

之前已经可以通过antlrworks 1.4去测试antlr的代码了:

【记录】尝试使用ANTLRWorks 1.5开发

比如这样的代码:

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的官网:

http://www.antlr3.org/

(注:v4的官网是:http://www.antlr.org/

找了半天,基本上,最接近所需要的东西的,也只是:

从文档页面:

http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+documentation

找到的几个:

Composite Grammars

Grammars

Grammar options

但是很明显,最多也只是找到部分解释,没有完整的antlr v3的语法的解释。

当然,倒是在:

Grammar options

中可以知道,更多的,关于options,都有哪些,以及含义如何。

2.后来也找到了:

ANTLR-centric Language Glossary

但是看了半天,也还是没有找到语法的解释。

只是普及了一些相关的概念。

其中,以为其所提到的:

Context-free grammar

中会有这样的语法呢,结果发现也不是。

3.后来还是无意间从:

An Introduction To ANTLR

看到了其所提到的:

meta-language

然后去搜:

antlr  meta-language

而找到的:

ANTLR Meta-Language

(不是antlr官网)

以及:

刚才那帖子的更完整的版本:

An Introduction To ANTLR

 

4.倒是后来也发现了,别人也有同样的需求:

ANTLR3 Syntax reference?

只是没有回答的对而已。

 

5.参考上面的:

ANTLR Meta-Language

大概总结如下:

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 Meta-Language



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量