我试图创建ANTLR语法,将解析以下输入:如何使用ANTLR将所有内容都保存到文件末尾?
@code 123 some arbitrary text
我想将它拆分到三个标记:@code
,123
和空间之后的文字。它应该是一件很简单,但我不明白如何使其工作..
我试图创建ANTLR语法,将解析以下输入:如何使用ANTLR将所有内容都保存到文件末尾?
@code 123 some arbitrary text
我想将它拆分到三个标记:@code
,123
和空间之后的文字。它应该是一件很简单,但我不明白如何使其工作..
这听起来不像antlr的一个很好的问题。您可以定义像AT这样的令牌:@ [a-z +],NUMBER:[0-9] + WORD:[az] +和SIGNIFICANT_SPACE:[] + WS:[\ n] {skip();}
然后语法一样,
在第[SIGNIFICANT_SPACE | WORD] +
并重构词和空格,但它似乎是错误的。
您也可以查看antlr中的filter选项。您可以使用它来分析部分输入,然后检查令牌的字符范围以获取被过滤掉的行的部分。
这很简单。
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。
对我来说,这个失败与“以下替代品永远不能匹配:1”,指的是“ANYTHING:。*”这一行。 – 2012-01-20 23:30:36
使用ANTLR是否是一个困难的要求?看起来你可以使用正则表达式。如果您确实需要ANTLR,那么任意文本是否需要拆分为令牌或单个令牌? – 2011-03-15 23:13:38