Java 如何在ANTLR文件结束前获取所有内容?

Java 如何在ANTLR文件结束前获取所有内容?,java,antlr,antlr3,Java,Antlr,Antlr3,我正在尝试创建ANTLR语法,该语法将解析以下输入: @code 123 some arbitrary text 我想把它分成三个标记:@code,123和空格后的任何文本。。它应该很简单,但我不明白如何让它工作。对于antlr来说,这听起来不是一个好问题 您可以定义标记,如AT:@[a-z+],NUMBER:[0-9]+WORD:[a-z]+和有效_空格:[]+WS:[\n]{skip();} 然后一个语法,比如 数字[有效空格|字]+ 重建单词和空格,但这似乎是错误的 您还可以查看antl

我正在尝试创建ANTLR语法,该语法将解析以下输入:

@code 123 some arbitrary text

我想把它分成三个标记:
@code
123
和空格后的任何文本。。它应该很简单,但我不明白如何让它工作。

对于antlr来说,这听起来不是一个好问题

您可以定义标记,如AT:@[a-z+],NUMBER:[0-9]+WORD:[a-z]+和有效_空格:[]+WS:[\n]{skip();}

然后一个语法,比如

数字[有效空格|字]+

重建单词和空格,但这似乎是错误的

您还可以查看antlr中的选项。您可以使用它来解析部分输入,然后检查标记的字符范围,以获得过滤掉的部分行。

这非常简单

program : start ID end;

start : '@' ID;

end : ANYTHING;

ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'1')*;
ANYTHING : .*;
WS : (' '|'\n'|'\r'|'\t')+ {$channel = HIDDEN;};
除此之外,您只需要扩展规则以适合您的目的


这应该适用于ANTLR3,但我不知道ANTLR2。

使用ANTLR有困难吗?看起来你可以用正则表达式。如果您确实需要ANTLR,那么任意文本是否需要拆分为标记或单个标记?对于我来说,这失败于“以下备选方案永远无法匹配:1”,参考行“ANYTHING:.*”。