Antlr 在AntlWorks中写入文件

Antlr 在AntlWorks中写入文件,antlr,antlrworks,Antlr,Antlrworks,我正在使用ANTLR框架编写解析器。我想写一个文件,所以我用这个代码,但我不知道我应该在哪里关闭文件 @header { import java.io.*; } main:{ BufferedWriter out = null; try{ FileWriter fstream = new FileWriter("output.txt"); out = new BufferedWriter(fstream); } catch (Exception e

我正在使用ANTLR框架编写解析器。我想写一个文件,所以我用这个代码,但我不知道我应该在哪里关闭文件

@header
{
    import java.io.*;
}

main:{ 

  BufferedWriter out = null;
    try{ 
  FileWriter fstream = new FileWriter("output.txt");
  out = new BufferedWriter(fstream);

  }

  catch (Exception e){
  System.err.println("Error: " + e.getMessage());
  }

  };


    p1  :   p2 {out.write("this is p1");}
        ;

   p2 ......

如果
main
是语法的入口点,则应在该规则末尾关闭流:

grammar T;

@header {
  import java.io.*;
}

@members {
  OutputStream out = null;

  void before() {
    // initialize 'out' here
  }

  void after() {
    // close 'out' here
  }
}

main
 : {before();}
   p1 EOF
   {after();}
 ;

p1
 : p2 {out.write("this is p1");}
 ;

p2
 : ...
 ;
您甚至可以在
@members
块中提供方法的空实现:

@members {
  OutputStream out;

  void before() {}

  void after() {}
}

并在listener/visitor类中重写/实现它们,以最小化语法本身中特定于目标的代码。

我尝试过,但在生成java代码后,after方法中出现错误,它不知道
out
。你知道为什么会这样吗?@user2944170,不,我不知道。