如何使antlr3解析“前进?”

时间:2011-02-21 18:48:36

标签: java antlr antlr3

我正在尝试使用Antlr3解析以下语法:

String...
java.lang.String
java.lang.Object...

这是我的.g文件(部分内容):

doc: name DOTS? EOF;
name: ATOM ('.' ATOM)*;
ATOM: ('a' .. 'z' | 'A' .. 'Z')+;
DOTS: '...';

它不起作用。 Antlr3在'.'之后将ATOM视为name的一部分,而不是DOTS的开头。我该如何解决?

2 个答案:

答案 0 :(得分:2)

当我使用你的语法时:

grammar T;

parse : doc+  EOF;
doc   : name DOTS?;
name  : ATOM ('.' ATOM)*;
ATOM  : ('a' .. 'z' | 'A' .. 'Z')+;
DOTS  : '...';
WS    : (' ' | '\n') {skip();};

解析来源:

String...
java.lang.String
java.lang.Object...

我得到以下解析树: enter image description here

所以,我不确定问题究竟是什么:它似乎做你想做的事。

答案 1 :(得分:0)

这样的事情会好吗?我确信有更好的方法来表达你所需的语法。我假设想在最后一个ATOM之后匹配任意数量的点作为点。

doc:    
     name dots EOF;

name: ATOM (DOT ATOM)*;

dots    :   
    DOT*;

DOT :   '.';
ATOM: ('a' .. 'z' | 'A' .. 'Z')+;