我对 ANTLR 很陌生,我目前正在使用 Netbeans IDE 7.3 的 ANTLRWorks 2 插件来可视化我的 ANTLR 4.1 语法文件。
我想要做的是用行分隔的美元值解析一个文本文件,并将它们全部返回一个双精度数组“double []”的一维数组中。
例如,假设我有一个文件 values.txt,其中包含:...
12.40
16.91
18.00
17.97
12.85
...我想使用 ANTLR 生成的 **Parser.parseMethod(tokens)* 返回一个数组。所以返回值为 {12.4,16.91,18.00,17.85,12.85}
我尝试通过在此处回答的类似问题( Antlr Array Help )来调整我发现的这种方法,并决定使用列表,从而产生以下代码:
grammar Values;
parse returns [List<Double> numbers]
@init {
$numbers = new ArrayList<Double>();
}
: (line {$numbers.add($line.row);})* EOF
;
line returns [Double row]
@init {
$row = new Double(0.0);
}
: (Number {$row = Double.parseDouble($Number.text);})+ (LineBreak | EOF)
;
fragment Digit : ('0'..'9')+ ;
Number : Digit '.' Digit ;
Space
: (' ' | '\t') -> channel(HIDDEN)
;
LineBreak
: '\r'? '\n'
| '\r'
;
但是一旦生成了这个语法文件,parse() 方法就会返回一个“ParseContext”对象......
public final ParseContext parse() throws RecognitionException {...}
...我不知道如何使用。而且我不知道为什么要创建ParseContext。