'mismatches'라는 변수에 오류 개수를 유지하려고합니다. 여기서 'bison 파일의 첫 번째 부분에 선언합니다.bison 문법 내에서 선언 된 C++ 변수를 사용하는 방법
필자의 들손 문법에서 나는 그 변수에 값을 설정했다.
그런 다음 main() 함수에서 들소 파일의 셋째 부분에서 내가 그 값을를 법원, 그리고
내 들소 파일의 매우 수정/잘라 버전 0의 :
%{
extern "C" FILE *yyin;
extern int yylineno;
extern int yynerrs;
int yylex();
// Declare 'mismatches'
int mismatches;
%}
%error-verbose
%%
expression:
expression ADDOP term
{
cout << "Parser is now here. Going to set `mismatches` to 6";
mismatches = 6;
}
| term
;
%%
int main()
{
// Outputs 0
cout << mismatches;
yyparse();
return 1;
}
을
'mismatches'변수를 bison 파일의 모든 부분에서 사용할 수 있도록하려면 어떻게해야합니까? 당신이 당신의 카운터 업데이트 yyerror 서브입니다 삽입하는 명백한 장소를 구문 오류를 계산하려면
이미 있습니다. 생성 된 파일을 살펴보면,'% {'와'%}'사이의 전체 블록이 그대로 결과 파일에 복사되고 생성 된 파일의 초기 부분에 있어야합니다. 그렇지 않으면 헤더 파일을 포함하는 데 문제가있을 수 있습니다). –
실제로 나는 그것을 거기에서 보았다. 그리고 내가 본 것으로부터 의도 한대로 작동해야합니다. 하지만 그 값은 0입니다. 값을 지정하지 않아도 int 불일치가 생겨 << 불일치가 발생합니다; main() 함수에서 0이라고 표시합니다 (초기화되지 않은 경고를 표시해야 할 때) – sqram
전역 변수가 암시 적으로 초기화 될 때 해당 변수가 아닙니다. 예 : [여기] (http://www.cplusplus.com/forum/general/7280/)에서 Bjarne Stroutrup (C++의 작성자)의 견적을 구하십시오. –