JFlex:从多个文件中读取

时间:2015-01-15 22:08:33

标签: flex-lexer jflex

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

1 个答案:

答案 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));