2015-01-15 3 views
1

Недавно я начал использовать JFlex и столкнулся с необходимостью читать из нескольких входных файлов в определенном порядке. Когда он заканчивает первый файл, я хочу, чтобы Jflex продолжал его текущее состояние, а сканер продолжал из нового файла.JFlex: чтение из нескольких файлов

До сих пор все работает хорошо, когда у меня есть только один входной файл:

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(); 

ответ

2

JFlex не появляется для поддержки yywrap(), который, как вы это делаете в Лекса и прогибается, но Самый простой способ сделать это состоит в следующем:

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)); 
Смежные вопросы