как включить импорт в flex/bison

Я делаю конвертер языков программирования, и у него есть импорт и включение.

Например:

 import com.nanana.MyClassFile
 include "myfile.any"

Я новичок, что означает, что я потерялся в том, как я могу это сделать. Мне интересно, возможно ли разобрать другой файл во время разбора одного.

И как я могу это сделать?

РЕДАКТИРОВАТЬ:

Код, который я использую для анализа файлов в основной функции:

yyin = fopen( argv[1], "r" ); 
return yyparse();

Могу ли я использовать этот же код или есть другой?


person Ratata Tata    schedule 08.11.2011    source источник


Ответы (1)


Лексер использует макрос YY_INPUT для получения своих данных. В синтаксическом анализаторе после анализа команды include "myfile.any" синтаксическому анализатору потребуется открыть новый файл и организовать возврат его данных из YY_INPUT вместо исходного файла. Как только EOF будет достигнут, YY_INPUT нужно будет продолжить чтение из исходного файла. Вы, вероятно, захотите хранить эти открытые файлы в стеке, чтобы включаемые файлы могли, в свою очередь, включать в себя другие файлы, но следите за бесконечным циклом включения.

person Dan    schedule 09.11.2011
comment
Как я уже сказал, я новичок, надеюсь на более глубокий и примерный ответ. Пожалуйста. спасибо. - person Ratata Tata; 10.11.2011
comment
Точное решение будет сильно зависеть от вашего конкретного парсера/лексера; это не совсем подходящий форум, чтобы вдаваться в такие подробности. Идея состоит в том, чтобы использовать YY_INPUT для подачи данных в лексер по одному символу за раз. Анализатор будет контролировать, из какого файла берутся эти символы. Взгляните на сгенерированный код, чтобы увидеть, как все это связано друг с другом. В часто задаваемых вопросах по flex есть несколько записей, которые косвенно касаются этой темы (например, как я могу одновременно использовать несколько источников ввода для одного и того же сканера?) - person Dan; 14.11.2011