Java 使用ANTLR 4将文件解析为数组?

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

我对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.00,17.85,12.85}

我试图通过这里回答的一个类似问题来调整这种方法,并决定使用一个列表,产生以下代码:


…我不知道怎么用。我不知道为什么要创建ParseContext。

ANTLR 4为每个规则生成一个上下文类,用于在最终的解析树中表示对该规则的调用。该名称源自规则名称,因此规则
parse
ParseContext
表示,规则
foo
fooccontext
表示。语法生成的
ParseContext
类将为您提供对一些内容的访问,包括以下特定于语法的项目

  • numbers
    返回值将存储在生成的字段
    ParseContext.numbers
  • 生成的
    line()
    方法将返回一个
    列表
    ,该列表包含从
    parse
    调用
    规则时的解析树节点
  • 该类还将包含ANTLR 4侦听器和访问者功能工作所需的支持方法

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 {...}