Java 如何在ANTLR文件结束前获取所有内容?
我正在尝试创建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
@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:.*”。