如何使用ANTLR将所有内容保存到文件末尾?

时间:2011-03-15 21:53:12

标签: java antlr antlr3

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

@code 123 some arbitrary text

我想把它分成三个标记:@code123以及空格后面的任何文字。它应该是非常简单的东西,但我无法理解如何让它工作..

2 个答案:

答案 0 :(得分:1)

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

你可以定义像AT这样的标记:@ [a-z +],NUMBER:[0-9] + WORD:[az] +和SIGNIFICANT_SPACE:[] + WS:[\ n] {skip();} < / p>

然后是一个语法,

AT NUMBER [SIGNIFICANT_SPACE | WORD] +

并重建单词和空格,但似乎不对。

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

答案 1 :(得分:0)

这很简单。

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。