YACC 문제 : 다음 비 터미널에서 데이터를 사용할 수 있도록합니다.
문제
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); }
그렇게 할 기회가 있습니까? 모든 도움이 정말 감사하겠습니다!
해결책
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