我正在尝试使用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
的开头。我该如何解决?
答案 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...
我得到以下解析树:
所以,我不确定问题究竟是什么:它似乎做你想做的事。
答案 1 :(得分:0)
这样的事情会好吗?我确信有更好的方法来表达你所需的语法。我假设想在最后一个ATOM之后匹配任意数量的点作为点。
doc:
name dots EOF;
name: ATOM (DOT ATOM)*;
dots :
DOT*;
DOT : '.';
ATOM: ('a' .. 'z' | 'A' .. 'Z')+;