2014-09-08 4 views
1

일부 입력을 받아 파서에 대한 토큰을 만드는 간단한 플렉스 프로그램을 작성했습니다.플렉스 오류 matchtype.h

내 코드 [ex4.l] 난을 lex.yy.c 파일을 생성 명령 flex ex4.l을 실행하고 내가 cc lex.yy.c -lfl를 사용하여이 작업을 실행하려고 할 때 내가 붙어있어 이후

%{ 
enum yytokentype{ 
NUMBER = 258, 
ADD = 259, 
SUB = 260, 
MUL = 261, 
DIV = 262, 
ABS = 263, 
EOL = 264 
}; 
int yylval 
%} 

%% 
"+"  {return ADD;} 
"-"  {return SUB;} 
"*"  {return MUL;} 
"/"  {return DIV;} 
"|"  {return ABS;} 
[0-9]+ {yylval = atoi(yytext);return NUMBER;} 
\n  {return EOL;} 
[ \t] {/*ignore whitespace */} 
.  {printf("Mystery character %c\n",*yytext);} 
%% 
int main(int argc, char **argv) 
{ 
int tok; 

while(tok = yylex()){ 
    printf("%d",tok); 
    if(tok == NUMBER) 
     printf("=%d\n",yylval); 
    else 
     printf("\n"); 
} 
} 

이 오류 메시지가 표시됩니다. 그리고 나는이 오류가 계속 나는 문제가 무엇인지 전혀 모르겠다. 나는 이것에 아주 오래 머물러 있습니다. 당신의 플렉스 입력의

오류 메시지

cc lex.yy.c -lfl 
"/usr/include/sys/machtypes.h", line 33: syntax error before or at: typedef 
cc: acomp failed for lex.yy.c 
+1

나는 당신이 번들로 제공되는'acomp' 컴파일러와 함께 솔라리스와 썬 스튜디오를 사용하고 있다고 가정합니다. 이것은 헤더 파일과 오류 메시지에서 추측 한 것입니다. 컴파일러와 플렉스 버전을 추가하는 것이 좋을 것입니다. ('flex --version'은 플렉스 버전을 줄 것이고,'cc -V'는 C 컴파일러에서도 똑같이 할 것입니다.) – rici

답변

2

에게 선 11 조언을 주시기 바랍니다 :

int yylval 

세미콜론이 없습니다.

의심 할 여지없이 flex는 코드 프롤로그 바로 뒤에 #include 지시문을 삽입하고 포함 된 (재귀 적으로) 첫 번째 파일은 machtypes.h입니다. 오류는 전처리 된 프로그램 C 인 것으로 추정하기 때문에, 그 파일의 첫 번째가 아닌 전처리 라인 네요 : 구문 오류이다

int yylval typedef struct _label_t { long val[2]; } label_t; 

를보고.

+0

오, 그럴 수 없습니다. 충분히 고마워. 너는 구세주 야. 플렉스 (flex)와 들소 (bison)의 기본을 배우기 좋은 소스를 추천 해 주실 수 있습니까? 나는 현재 Flex & Bison을 John Levine이 읽고 있습니다. – user1010101

+1

@ user2733436 : Levine의 책은 훌륭합니다. 모든 새로운 기능을 다루지는 못합니다. 그 너머에, C를 잘 이해하지 않으면 플렉스와 들소를 사용할 수 없습니다. 이 질문처럼, 거의 모든 까다로운 flex/bison 버그는 실제로 C 코드에 있습니다. – rici

+0

안녕하세요, 들소에 대한 새로운 질문을했습니다. 당신이 나를 위해 대답 할 수 있습니까? http://stackoverflow.com/questions/26458080/bison-specification-and-precedence-order – user1010101