Как получить доступ к участнику из действия бизона - PullRequest
1 голос
/ 24 декабря 2010

Я вызываю yyparse из функции-члена. Как получить доступ к переменным / функции-члену из действия bison.

Я сейчас делаю как

%{
#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 Ответ

2 голосов
/ 24 декабря 2010

Вы можете настроить бизона на прием параметров:

%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();
   }
...