如何在yacc中解析命令行参数?

如何在yacc中解析命令行参数?,yacc,lex,Yacc,Lex,如何在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 (' '); } 其中目标包含命令行参数。但是只有标准输入被取消了,如何执行dis输入函数。

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

其中目标包含命令行参数。但是只有标准输入被取消了,如何执行dis输入函数。

您的意思是希望解析器接受命令行参数吗?然后需要将这些参数添加到主函数中。lexer输入称为
FILE*yyin
,并在lexer中初始化为
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();
}
#包括
外部文件*yyin;
int main(int argv,字符**argv)
{
如果(argc==2)
{
yyin=fopen(argv[1],“r”);
如果(!yyin)
{
fprintf(stderr,“无法读取文件%s\n”,argv[1]);
返回1;
}
}
yyparse();
}
如果希望执行自己的函数而不是flex提供的函数,则需要定义
YY_输入