как разобрать из аргументов командной строки в yacc? - PullRequest
0 голосов
/ 14 апреля 2010

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

конечно, я не определил ввод в lex и 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 (' ');
}

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

1 Ответ

1 голос
/ 10 мая 2010

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

Если вы хотите, чтобы ваша собственная функция выполнялась вместо функции, предоставляемой flex, вам нужно определить макрос YY_INPUT.

...