获取Flex/Bison动作结果

yod*_*uhe 6 c++ bison flex-lexer

我正在使用Flex/Bison/C++来评估表达式这是一个示例bison文件

string res; 
yy_scan_string(expression.c_str());               

yyparse();
cout<<"Result:"<<res<<"\n";
....
expr: expr PLUS expr { 
          $$=evaluate("+",$1,$3);
          res=$$;
          } 
     |expr MINUS expr { 
          $$=evaluate("-",$1,$3);
          res=$$;
          } 
Run Code Online (Sandbox Code Playgroud)

而不是使用变量res并将值存储在每个动作中,是否有一种标准(如yylval)方式来访问yyparse()之后的最终结果?

Mar*_*ork 8

是.

有一个顶级规则,只做分配:

%%
    toplev:   expr                    { res = $1; }
    expr:     expr PLUS expr          { $$=evaluate("+",$1,$3);}
           |  expr MINUS expr         { $$=evaluate("-",$1,$3);} 
%%
Run Code Online (Sandbox Code Playgroud)