2011-03-15 22 views
0

我试图创建ANTLR语法,将解析以下输入:如何使用ANTLR将所有内容都保存到文件末尾?

@code 123 some arbitrary text 

我想将它拆分到三个标记:@code123和空间之后的文字。它应该是一件很简单,但我不明白如何使其工作..

+0

使用ANTLR是否是一个困难的要求?看起来你可以使用正则表达式。如果您确实需要ANTLR,那么任意文本是否需要拆分为令牌或单个令牌? – 2011-03-15 23:13:38

回答

1

这听起来不像antlr的一个很好的问题。您可以定义像AT这样的令牌:@ [a-z +],NUMBER:[0-9] + WORD:[az] +和SIGNIFICANT_SPACE:[] + WS:[\ n] {skip();}

然后语法一样,

在第[SIGNIFICANT_SPACE | WORD] +

并重构词和空格,但它似乎是错误的。

您也可以查看antlr中的filter选项。您可以使用它来分析部分输入,然后检查令牌的字符范围以获取被过滤掉的行的部分。

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。

+0

对我来说,这个失败与“以下替代品永远不能匹配:1”,指的是“ANYTHING:。*”这一行。 – 2012-01-20 23:30:36

相关问题