我正在使用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 ......
答案 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类中覆盖/实现它们,以最大限度地减少语法本身内的目标特定代码。