我正在尝试创建将解析以下输入的ANTLR语法:
@code 123 some arbitrary text
我想把它分成三个标记:@code
,123
以及空格后面的任何文字。它应该是非常简单的东西,但我无法理解如何让它工作..
答案 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。