【发布时间】:2015-03-03 00:27:48
【问题描述】:
我想使用 flex/bison 创建一个计算器。我创建了以下%union:
%union{
int intValue;
double realValue;
char * numType;
}
因此,当我想简化为 term: primary 之类的规则时,我会检查 numType 是“INT”还是“REAL”,然后执行以下操作:
$<realValue>$=$<realValue>1; $<numType>$=$<numType>1;
(对于 intValue 也是一样的)。现在的问题是,当我有这样的规则时:
term:
expr '+' expr |
expr '*' expr |
...
如果条款是实数还是整数,我必须检查太多次才能将它们放入 $realValue$ 或 $intValue$。问题是:bison/yacc 是否有可能或有任何功能可以减少所有这些检查?
例如像
%type <intValue,realValue>
您可以在其中为类型分配两个值,例如,如果您有这样的规则:
a: primary ;
从现在开始,当 a 用于归约到另一个规则并访问 a 时,将访问 realValue 或 intValue(具有值的那个)。或者类似的东西......?
【问题讨论】:
标签: compiler-construction calculator bison yacc