我最近开始使用JFlex,并遇到了按特定顺序从多个输入文件中读取的需要。当它完成第一个文件时,我希望 Jflex 继续其当前状态,扫描程序从新文件继续。
到目前为止,当我只有 1 个输入文件时,一切正常:
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();
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));