我正在尝试用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的开始。我该怎么解决它呢?
发布于 2011-02-22 03:48:45
当我使用你的语法时:
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-22 03:39:17
像这样的东西可以吗?我相信有更好的方法来表达你所需要的语法。我假设想要匹配最后一个原子之后的任意数量的点作为点。
doc:
name dots EOF;
name: ATOM (DOT ATOM)*;
dots :
DOT*;
DOT : '.';
ATOM: ('a' .. 'z' | 'A' .. 'Z')+; https://stackoverflow.com/questions/5069951
复制相似问题