如何在一个单独的文件中使用`yy_scan_string(const char * str)`(由lex yacc生成)

时间:2012-09-24 12:10:58

标签: c++ redirect bison yacc lex

我想在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;
   }

1 个答案:

答案 0 :(得分:4)

最简单的解决方案可能是在语法文件中添加一个单独的函数,然后调用yy_scan_string

/* Stuff... */

%%

/* Grammar */

%%

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

然后从您的代码中调用scan_string