3

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

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

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

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

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

4

2 回答 2

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...

我得到以下解析树: 在此处输入图像描述

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

于 2011-02-21T19:48:45.233 回答
0

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

doc:    
     name dots EOF;

name: ATOM (DOT ATOM)*;

dots    :   
    DOT*;

DOT :   '.';
ATOM: ('a' .. 'z' | 'A' .. 'Z')+; 
于 2011-02-21T19:39:17.433 回答