2010-04-14 5 views
0

yacc에서 명령 줄 argu 구문을 구문 분석하는 방법은 무엇입니까? 물론yacc에서 명령 줄 argu 구문을 구문 분석하는 방법은 무엇입니까?

내가 모두 렉스 & yacc를 입력으로 정의되지 않은 다음 타겟은 커맨드 라인 가지 인자를 포함

int input(void) 
{ 
printf("in input\n:"); 
char c; 
if(target > limit) 
return 0; 
if((c = target[0][offset++]) != '\0') 
return (c); 
target++; 
offset =0; 
return (' '); 
} 

썼다. 그러나 표준 입력 만이 dis 입력 함수가 실행되도록 만드는 방법에 대해 흥미를 느끼고 있습니다.

답변

1

생성하는 파서가 명령 줄 인수를 받아들이도록 하시겠습니까? 그런 다음이 인수를 main 함수에 추가해야합니다. 렉서 입력은 FILE* yyin이며, 렉서에서는 stdin으로 초기화됩니다. 당신이 당신의 자신의 기능을 대신 플렉스가 제공하는 하나의 실행하려면 당신은

#include <stdio.h> 
extern FILE* yyin; 
int main(int argv, char** argv) 
{ 
    if(argc==2) 
    { 
     yyin = fopen(argv[1], "r"); 
     if(!yyin) 
     { 
      fprintf(stderr, "can't read file %s\n", argv[1]); 
      return 1; 
     } 
    } 
    yyparse(); 
} 

하여 기본 동작을 변경할 수 있습니다, 당신은 YY_INPUT 매크로를 정의 할 필요가있다.