我想在c中生成一些我在b中生成的变量:
a : b c { ...some code...}
一个简单的例子:
b : X { int result = 0; }
| Y { int result = 1; }
所以我可以,稍后再说:
c : D { printf(result + 1); }
| E { printf(result + 2); }
有没有机会这样做?真的很感激任何帮助!
答案 0 :(得分:1)
result
应该是一个全局变量。你可以通过包括
%{
int result;
%}
位于YACC文件的顶部。当然,您还应该分别用int result = 0
和int result = 1
替换result = 0
和result = 1
。
答案 1 :(得分:0)
你可以像Can can那样做,但一般来说,在语法规则中使用全局变量并不是一个好主意。声明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);};