Записать в файл в 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 ......

person Community    schedule 13.12.2013    source источник


Ответы (1)


Если 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() {}
}

и переопределить/реализовать их в классах слушателя/посетителя, чтобы минимизировать целевой код внутри самой грамматики.

person Bart Kiers    schedule 13.12.2013
comment
Я пытаюсь это сделать, но после создания java-кода у меня возникает ошибка после метода, он не знает out. у вас есть идеи, почему это произошло? - person ; 13.12.2013
comment
@ user2944170, нет, не знаю. - person Bart Kiers; 14.12.2013