YACC 문제 : 다음 비 터미널에서 데이터를 사용할 수 있도록합니다.

StackOverflow https://stackoverflow.com/questions/393041

  •  23-08-2019
  •  | 
  •  

문제

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);};
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top