2016-05-20 3 views
0

я сгенерировал sintax.tab.hh и sitax.tab.cc с бизонами успешно и включен в lex.l для создания lex.yy.cc со следующими командами:Как использовать yyparse() бизона в другом месте?

bison -d sintax.yy 
flex lexer.l 

и у меня есть 3 соответствующих файлов для простого синтаксического анализа, в syntax.yy и lexer.l я не В любой момент добавьте код C++; это правильно?

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

В моем методе объявлены в другом классе, как я могу:

  1. указать вход для синтаксического анализа будет определенная строка?
  2. перезапустить парсер другой строкой?

ответ

0

Это действительно вопрос lex (flex), поскольку лексер обрабатывает входные данные.

С прогибается, вы можете использовать функции:

yyrestart(FILE * input_file) 
yy_scan_string(const char * string) 
yy_scan_buffer(const char * buffer, size_t size) 

для переключения на вход какого-либо источника, кроме стандартного ввода (назовем их перед вызовом yyparse). Существует также множество функций «буфера», которые вы можете использовать для создания нескольких буферов «на лету» и переключаться между ними в середине разбора (полезно для обработки таких вещей, как «include» директивы).

Вы можете прочитать все о них в the flex documentation

Смежные вопросы