как использовать `yy_scan_string (const char * str)` (генерируется lex yacc) в отдельном файле

Я хочу использовать YY_BUFFER_STATE yy_scan_string(const char *str) и другие функции, такие как yyparse() в моем main.cppЯ сделал вещи:

extern "C"{
extern YY_BUFFER_STATE yy_scan_string(const char *str);
}

Но есть ошибка error:YY_BUFFER_STATE ‘не называет тип`, тогда я сделал:

extern yy_buffer_state;
typedef yy_buffer_state *YY_BUFFER_STATE;
extern int yyparse();
extern YY_BUFFER_STATE yy_scan_buffer(char *, size_t);

Но та же проблема также, как это сделать, спасибо, очень ценю вашу помощь!

Вот файл main.cpp.
#include «main.h»

 #include <string.h>
extern "C"{void scan_string(const char* str);}
int yyparse();
void test::getvalue(int& var)
{
if (var!=0)
std::cout<<"True"<<std::endl;
else
std::cout<<"False"<<std::endl;
}

int main(){
std::string str="T+F";
//how to send str as an Input to parse?

yyparse();
return 0;
}

3

Решение

Возможно, самое простое решение — добавить отдельную функцию в файл грамматики, которая, в свою очередь, вызывает yy_scan_string,

/* Stuff... */

%%

/* Grammar */

%%

void scan_string(const char* str)
{
yy_switch_to_buffer(yy_scan_string(str));
}

Тогда позвони scan_string из вашего кода.

2

Другие решения

Других решений пока нет …