【发布时间】:2013-07-19 20:34:09
【问题描述】:
我是 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。
【问题讨论】: