我想使一些变量我在在C可利用B产生:

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

一个简单的例子:

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

,所以我可以,稍后在C说:

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

有没有可能做到这一点?任何帮助将真正理解!

有帮助吗?

解决方案

result应该是一个全局变量。您可以通过做到这一点。

%{
    int result;
%}

在你YACC文件的顶部。当然,还应该分别与int result = 0int result = 1取代result = 0result = 1

其他提示

您可以做灿建议,但通常它不是语法规则使用全局变量是一个好主意。申报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);};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top