2015-01-14 8 views
0

여기는 내 프로그램의 일부입니다.들소와 C 코드 혼합

%{ 
    #include <stdlib.h> 
    #include <stdio.h> 
    #include <string.h> 
    #include <math.h> 
    int yylex(void); 
    int yylineno; 
    char* yytext; 
    void yyerror(const char *s) { printf("ERROR: %s\n", s); } 
    void addID(char *ID); 

%} 

%union{ char * string;} 


%% 
    program: 
|DECLARE vdeclarations IN commands END 
; 

vdeclarations: 
vdeclarations IDENTIFIER {addID($2);} 
| IDENTIFIER {addID($1);} 
; 

는 끝까지

struct list_ID { 
    char *ID; 
    int index; 
    struct list_ID * next; 
}; 
typedef struct list_ID list_ID; 
list_ID * curr, * head; 
head = NULL; 
int i = 0; 
void addID(char *s) 
{ 
    curr = (list_ID *)malloc(sizeof(list_ID)); 
    curr->ID = strdup(s); 
    curr->index = i++; 
    free(s); 
    curr->next = head; 
    head = curr; 
} 

에서 일부 C 함수는 간단히 말해서 나는 나에게 이러한 오류를 줄 연결리스트하지만 GCC 모든 식별자를 추가 할.

kompilator.y:74:1: warning: data definition has no type or storage class [enable 
d by default] 
kompilator.y:74:1: error: conflicting types for 'head' 
kompilator.y:73:19: note: previous declaration of 'head' was here 
kompilator.y:74:8: warning: initialization makes integer from pointer without a 
cast [enabled by default] 
kompilator.y: In function 'addID': 
kompilator.y:82:13: warning: assignment makes pointer from integer without a cas 
t [enabled by default] 
kompilator.y:83:7: warning: assignment makes integer from pointer without a cast 
[enabled by default] 

이렇게 들소 믹스를 만드는 것은 불가능합니까? 또는 내 C 코드 부분에 문제가 있습니까?

+0

이 정보에 어떤 문제가 있는지 알 수 없으므로 각 파일의 이름과 내용을 게시하고 프로그램을 컴파일하는 방법을 알려주십시오. –

+0

당신은 그것의 * .y 파일을 표준적인'flex file.l bison -dy file.y gcc lex.yy.c y.tab.c -o file.exe' – whd

답변

2
head = NULL; 

이것은 모든 기능을 제외한 문장입니다. 허용되지 않습니다. 전역 데이터를 초기화하려면

는, 선언의 시점에서 그것을 할 :

list_ID * curr, * head = NULL; 

또한, 당신은 malloc의 결과를 캐스팅하지 않아야합니다.