Yacc的问题:决定未来非终端提供数据
题
我想使一些变量我在在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 = 0
和int result = 1
取代result = 0
和result = 1
。
其他提示
您可以做灿建议,但通常它不是语法规则使用全局变量是一个好主意。申报b
和c
一个类型,这样你的规则是这样的:
%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);};
不隶属于 StackOverflow