tags:

views:

57

answers:

1

how to parse from command line arguements in yacc ?

of course i undefined input in both lex & yacc and then wrote

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 (' ');
}

where target contains the command line arguements. But only the standard input is getting excueted how to make dis input function get executed.

A: 

Did you mean you want your generates parser accept command line arguments? Then you need to add those arguments to the main function. The lexer input is called FILE* yyin, and is initialized to stdin in the lexer. You can change the default behavior by

#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();
}

If you want your own function to be executed instead of the one provided by flex, you need to define the YY_INPUT macro.

Rudi