写入ANTLRWorks中的文件

时间:2013-12-13 12:59:01

标签: 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){
  System.err.println("Error: " + e.getMessage());
  }

  };


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

   p2 ......

1 个答案:

答案 0 :(得分:0)

如果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类中覆盖/实现它们,以最大限度地减少语法本身内的目标特定代码。