0

我想让我在 b 中生成的一些变量在 c 中可用:

a   :   b c { ...some code...}

一个简单的例子:

b :  X  { int result = 0; } 
  |  Y  { int result = 1; }

所以我可以,稍后在 c 中说:

c : D   { printf(result + 1); }
  | E   { printf(result + 2);  }

有没有机会这样做?任何帮助将不胜感激!

4

2 回答 2

1

result应该是一个全局变量。您可以通过包括

%{
    int result;
%}

在 YACC 文件的顶部。当然,你也应该分别用和替换int result = 0和。int result = 1result = 0result = 1

于 2008-12-25T18:45:39.827 回答
0

您可以按照 Can 的建议进行操作,但通常在语法规则中使用全局变量并不是一个好主意。声明一个类型bc因此您的规则如下所示:

%union {
    int result;
};

%type <result> a b

%start a

%%

b : X {$$ = 0;} | Y {$$ = 1;} ;
c : D {$$ = 1;} | E {$$ = 2;} ;
a : b c {printf("%d", $1 + $2);};
于 2008-12-25T19:49:20.730 回答