2012-04-19 5 views
0

나는 Bison과 파서를 쓰고 있는데 다음과 같은 경고가 나타납니다. 내가 방법을 검색하는 구글을 사용하고Bison 문법 경고

fol.y:42 parser name defined to default :"parse" 
fol.y:61: warning: type clash ('' 'pred') on default action 

는 그들을 제거,하지만 거의 그들은 내가 그들과 함께 발견 된 모든 포스트 때문에 (훨씬 적은 오류를 수정하는 방법) 무엇을 의미하는지에 빈 손으로 올라와있다 컴파일 오류가있어 경고 자체가 해결되지 않았습니다. 누군가가 그들이 의미하는 것과 그 문제를 해결하는 방법을 말할 수 있습니까? 관련 코드는 다음과 같습니다. 61 번째 줄은 마지막 세미콜론입니다. 믿을 수 없을만큼 장황하기 때문에 나머지 문법은 생략했습니다.

%union { 
    char* var; 
    char* name; 
    char* pred; 
} 


%token <var> VARIABLE 
%token <name> NAME 
%token <pred> PRED 

%% 


fol: 
     declines clauses {cout << "Done parsing with file" << endl;} 
     ; 
declines: 
     declines decline 
     |decline 
     ; 
decline: 
     PRED decs 
     ; 

답변

1

첫 번째 메시지는 문법 사양의 %start parse을 포함하지 않았다 단지 경고 가능성이있다.

두 번째는 값을 반환해야하는 규칙이 있지만 반환 할 값 유형을 올바르게 지정하지 않은 것입니다. PRED는 unionpred 요소를 반환합니다. 문제가 declinedeclines에 대한 %type 항목을 생성하지 않았을 수 있습니다. 공용체가있는 경우 대부분의 규칙 유형 (—)을 지정하거나 명시 적 조치가없는 규칙 (기본값 $$ = $1; 조치를 대체 할 수 있도록)을 지정해야합니다.

나는 문제가 귀하가 지정한 라인에 있다고 확신하지 않으며, 우리는 귀하의 문제를 완전히 최소한으로 재현하지 못하기 때문에 귀하가 그것을 검증 할 수 있는지 조사 할 수 없습니다. decs에 대한 사양이 적절할 수 있습니다 (필자가 확신하지는 못했지만 그럴 수도 있습니다).

y.output 파일 (또는 이와 유사한 파일) 인 bison -v의 출력에서 ​​자세한 정보를 얻을 수 있습니다.

+0

% start 구문 분석을 사용하는 예제를 찾을 수 없습니다 (어디에 포함 시킬지 잘 모르겠다. 맨 위에 놓으면 glibc 오류가 발생 함). 다른 경고에는 다른 규칙이 있습니다. 거절하고 거절하지만 오류는 발생하지 않았습니다. – user381261

+0

시작 규칙이 문법의 첫 번째 규칙 인 경우에는 필요하지 않지만 '% token' 행 다음에'% start'을 넣을 수 있습니다. 그러나 우리는 그 경고를 생성 한 것을 볼 수 없기 때문에 쉽게 해결할 수 없습니다. 마찬가지로, 다른 문제들; 당신은 문제를 보존하면서 문법을 자르기에 조금 열정적이었습니다. 위의 코드를 감안할 때'clauses'와'decs'가 모두 사용되지만 '토큰으로 정의되지 않았고 규칙이 없습니다'. 'decs : NAME;'과'clauses : VARIABLE;'규칙을 추가해도 문제를 진단하는 데 도움이되지 않습니다. '들소'는 경고없이 문법을 컴파일합니다. –