我最近开始使用JFlex,并且需要按特定顺序读取多个输入文件。当它完成第一个文件时,我希望Jflex继续其当前状态,扫描程序继续从新文件。< / p>
到目前为止,当我只有一个输入文件时,一切正常:
br = new BufferedReader(new FileReader("input1"));
Flexer scanner = new Flexer(br);
scanner.yylex();
br.close();
//lame attempt for second input(not working)
br = new BufferedReader(new FileReader("input2"));
scanner.yylex();
br.close();
答案 0 :(得分:2)
JFlex似乎不支持yywrap()
,这是您在 lex 和 flex,中执行此操作的方法,但执行此操作的简单方法是如下:
InputStream in = new SequenceInputStream(...);
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
Flexer scanner = new Flexer(br);
其中...
为您提供了几种指定输入文件的方法,可以是Enumeration<? extends InputStream>
,也可以是InputStreams:
对,请注意您可以递归使用后者,例如
new SequenceInputStream(s1, new SequenceInputStream(s2,s3));