创建多个变量yacc

时间:2011-03-10 18:20:04

标签: variables yacc

我在yacc中创建了一个编译器,但我找不到允许用户使用单个标识符创建多个变量的方法。目前,他们可以为一个单词分配一个数字,但所有单词都具有相同的值。我正在使用它的代码:

...

%{
float var=0;
%}

...

exp: NUMBER 
   | WORD { $$ = var; }
   | exp '/' exp {  $$ = $1 / $3; }
   | ...

2 个答案:

答案 0 :(得分:0)

$$会将exp令牌分配给值var。所以这是静态的。

如果要解析某些WORD并获取其值,则应使用$$ = $1,其中$ 1是规则的第一个标记的值( id est WORD令牌)

那是你打算做的吗?我不确定,因为你已经完成了exp '/' exp

编辑:要将每个单词存储在变量中,我建议您使用浮点表。 您将需要使用计数器来增加表索引。但是你应该注意不同的单词值将以匹配顺序存储。

EDIT2: (不知道它是否会按原样编译) 我认为它看起来像:

exp: NUMBER
   | variable AFFECT exp { $$ = $3; var[ctr][0]="$1"; var[ctr][1]=$3; ctr++; }
   | variable { $$ = lookupVar($1); }

定义lookupVar以在表

中查找字符串$ 1

答案 1 :(得分:0)

您的代码似乎与mfcalc示例类似 bison manual
可能mfcalc样本将提供有用的信息,即使它不是 完全符合你的目的。
mfcalc有一个符号表,以保留VAR的名称(可能是 对应于代码中的WORD 实际上mfcalc在词法分析中强制执行符号名称查找,并进行分配 指向符号记录的指针,语义值为VAR 在野牛源代码中,语义值可以简单地称为 $1->value.var
希望这有帮助