我正在使用Flex / Bison / C ++来评估表达式 这是一个示例野牛文件
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=$$;
}
不使用变量res并将值存储在每个动作中, 是否有一种标准(如yylval)方式来访问yyparse()之后的最终结果?
答案 0 :(得分:8)
是
有一个顶级规则,只做分配:
%%
toplev: expr { res = $1; }
expr: expr PLUS expr { $$=evaluate("+",$1,$3);}
| expr MINUS expr { $$=evaluate("-",$1,$3);}
%%