2013-03-22 1 views
2

프로그램을 토큰 화하기위한 프로그램을 작성하고 있습니다. 나는 C 처리기 지시문을C 전처리 지시어에 대한 Lex 규칙

#.*        {printf("\n%s is a PREPROCESSOR DIRECTIVE",yytext);} 

에 맞게 다음과 같은 규칙을 작성한하지만 yyin에 입력으로 파일을 사용하는 경우, 파일의 처리기 지시문이 표시 yytext에서 일치하는 비어

예를 들어 나는 yyin표준 때 아무 문제가 없습니다

is a PREPROCESSOR DIRECTIVE 

에 있지만 파일이 입력 될 때만 발생합니다. 대체 LEX 규칙이 있습니까?

+0

일반적으로 이미 사전 처리 된 C 프로그램을 구문 분석합니다. 그리고 왜 C 프로그램을 토큰화할 것입니까? 기존의 C 파서를 사용하거나 기존 컴파일러를 확장 할 수 없습니까? (예 : http://gcc-melt.org/, 예 : 'gcc')? –

+0

컴파일러 실습 연습 문제입니다. – Sridhar

답변

1

문제가 발생할 가능성이 높기 때문에 lex 사양 대신 파일에서 작동하지 않는다는 점에 중점을 둡니다. lex 파일의 printf은 항상 적어도 #을 인쇄해야합니다. 다음은 파일에서 작동합니다.

%{ 
#include <stdio.h> 
%} 
%% 
#.* { printf("'%s' preproc\n", yytext); } 
%% 

int yywrap(void) 
{ 
     return 1; 
} 

int main(int argc, char ** argv) 
{ 
     if (argc > 1) 
     { 
       if ((yyin = fopen(argv[1], "r")) == NULL) 
       { 
         fprintf(stderr, "Can't open `%s'.\n", argv[1]); 
         exit(1); 
       } 
     } 
     return (yylex()); 
}