如何从野牛行动中访问班级成员

时间:2010-12-24 17:52:03

标签: c++ yacc bison

我从成员函数调用yyparse。 如何从野牛行动中访问成员变量/功能。

我目前正在做

%{
#include "myclass.h"
#include "parse.tab.hh"

MyClass *ptr=NULL;

void MyClass::evaluate(string expression)
    {
    ptr=this;
    yy_scan_string(expression.c_str());               
    yyparse();
    }

%}

%%
EXPR :  EXPR PLUS EXPR {
       $$ = ptr->memberFunction("+",$1,$3);
        }

1 个答案:

答案 0 :(得分:2)

您可以设置野牛接受参数:

%parse-param {MyClass* self}
%lex-param   {MyClass* self}

%{

    void MyClass::evaluate(string expression)
    {
        yy_scan_string(expression.c_str());               
        yyparse(this);   /* %parse-param allows a parameter to yyparse */
    }

%}

%%

    EXPR :  EXPR PLUS EXPR         {$$ = self->memberFunction("+",$1,$3);}

%%

   int yylex(MyClass* self) /* Controlled by %lex-param */
   {
       return self->lex();
   }