2011-10-03 4 views
7

yacc은 내 토큰이 내가 정의한 유형일 때 좋아하지 않습니다. 내 문법 %{ ... %} 블록 (.y) 파일의 맨 위에 yacc - 필드에 불완전한 유형이 있습니다.

, 나는 다음과 같은 구조를 정의하는 헤더 파일을 포함한다 : 규칙의 내 목록하기 전에

typedef struct _spim_register { 
    spim_register_type type; /* This is a simple enumeration, already defined */ 
    int number;    
} spim_register; 

을, 내가 가진 :

%token AREG 
... 
%union { 
struct _spim_register reg; 
} 
... 
%type <reg> register AREG 

은 내가의 라인에

error: field ‘reg’ has incomplete type

를 얻을 수bison이 작성한 코드를 컴파일하는 동안 절. 내 %union 성명에서, spim_register reg;를 작성하여 등록을 선언하려고하면 오류가 있습니다 : 나는 대한 조치에 내 헤더 파일의 데이터 구조를 사용할 수이기 때문에, 뭔가 특별한에 대한 %union { ... }이처럼

unknown type name ‘spim_register’ 

보인다 규칙.

+3

[아마도 관련 됨] (http://stackoverflow.com/questions/1430390/include-struct-in-the-union-def-with-bison-yacc) – user786653

답변

9

#includes가 올바른 순서로한다면 그것은 도움이 될 ...

대답이었다 user786653는 암시로, here. .l 파일에 .tab.h 파일을 포함하여 앞에 내 맞춤 구조 을 정의하는 헤더 파일을 포함해야했습니다.

+0

나를 위해 일해도. 감사! –

5

같은 문제가 발생했습니다. 내 *이 같은 파일 .L 때문에 :

다음 "y.tab.h"

는 "FP.h"를 포함

을 포함,이처럼 다시 썼다 :

는 "FP 포함 .h "

"y.tab.h "를 포함합니다.

작동합니다. 고맙습니다. @ArIck

+0

xcode에서 작업하기 재정렬이 실제로 발생하기 위해서는 프로젝트의 파생 데이터를 삭제해야한다는 것을 알았습니다. 어떤 이유로 xcode는 실제로 새 파일을 포함하지 않았습니다. – Jbryson

관련 문제