Java 使用ANTLR 4将文件解析为数组?
我对ANTLR非常陌生,目前正在使用Netbeans IDE 7.3的ANTLRWorks 2插件来可视化ANTLR 4.1的语法文件 我要做的是解析一个带有行分隔的美元值的文本文件,并将它们全部返回到一个由double“double[]组成的一维数组中 例如,假设我有一个文件values.txt,其中包含:Java 使用ANTLR 4将文件解析为数组?,java,antlr,grammar,antlr4,Java,Antlr,Grammar,Antlr4,我对ANTLR非常陌生,目前正在使用Netbeans IDE 7.3的ANTLRWorks 2插件来可视化ANTLR 4.1的语法文件 我要做的是解析一个带有行分隔的美元值的文本文件,并将它们全部返回到一个由double“double[]组成的一维数组中 例如,假设我有一个文件values.txt,其中包含: 12.40 16.91 18.00 17.97 12.85 …我想使用ANTLR生成的**Parser.parseMethod(令牌)*返回数组。所以返回值是{12.4,16.91,18
12.40
16.91
18.00
17.97
12.85
…我想使用ANTLR生成的**Parser.parseMethod(令牌)*返回数组。所以返回值是{12.4,16.91,18.00,17.85,12.85}
我试图通过这里回答的一个类似问题来调整这种方法,并决定使用一个列表,产生以下代码:
…我不知道怎么用。我不知道为什么要创建ParseContext。ANTLR 4为每个规则生成一个上下文类,用于在最终的解析树中表示对该规则的调用。该名称源自规则名称,因此规则
parse
由ParseContext
表示,规则foo
由fooccontext
表示。语法生成的ParseContext
类将为您提供对一些内容的访问,包括以下特定于语法的项目
返回值将存储在生成的字段numbers
中ParseContext.numbers
- 生成的
方法将返回一个line()
,该列表包含从列表
调用parse
规则时的解析树节点行
- 该类还将包含ANTLR 4侦听器和访问者功能工作所需的支持方法
parse
由ParseContext
表示,规则foo
由fooccontext
表示。语法生成的ParseContext
类将为您提供对一些内容的访问,包括以下特定于语法的项目
返回值将存储在生成的字段numbers
中ParseContext.numbers
- 生成的
方法将返回一个line()
,该列表包含从列表
调用parse
规则时的解析树节点行
- 该类还将包含ANTLR 4侦听器和访问者功能工作所需的支持方法
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'
;
public final ParseContext parse() throws RecognitionException {...}