1

我最近开始使用 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();
4

1 回答 1

2

JFlex 似乎不支持yywrap(),这就是您在lexflex 中执行此操作的方式,但执行此操作的简单方法如下:

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));
于 2015-01-16T00:45:48.973 回答