使用ANTLR将非贪婪序列作为字符串

时间:2013-09-11 23:16:56

标签: java parsing antlr

我将序列作为字符串来解决问题。我有一个包含如下字符串的文件:

{TEXT="<div itemprop=\"content\"><div>some text</div>"}

我想获得并使用恰好在第一个和最后一个引号之间的文本。首先我试过:

parse : line+;
line : '{TEXT="' SEQUENCE '"}' {System.out.println($SEQUENCE.getText())};
SEQUENCE : .+?;

但它失败了,SEQUENCE以这种方式只获得一个符号。我试过了:

parse : line+;
line : '{TEXT="' (a+=SEQUENCE)*? '"}' {System.out.println($a.getText())};
SEQUENCE : .;

我得到了令牌列表,所以我不能使用getText。

1 个答案:

答案 0 :(得分:1)

如果你想以这种方式做,你可以这样做:

grammar Sequence;

parse : line+;
line : '{TEXT="' a=sequence '"}' {System.out.println(((LineContext)_localctx).a.getText());};
sequence : .+?;

ANY:.;

但ANTLR4中还有其他机制,如听众和访问者。