2010-04-14 3 views
0

как разобрать аргументы командной строки в yacc?как разобрать аргументы командной строки в yacc?

конечно я не определен вклад как в ЛЕКС & 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 (' '); 
} 

где цель содержит строки заданы параметры командной. Но только стандартный ввод получает excueted, как заставить эту функцию ввода выполнить.

ответ

1

Возможно, вы хотите, чтобы ваш генератор парсер принимал аргументы командной строки? Затем вам нужно добавить эти аргументы к основной функции. Вход лексера называется 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 макрос.