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

时间:2010-04-14 11:59:18

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

其中target包含命令行参数。但是只有标准输入才会被激活,如何让dis输入功能得到执行。

1 个答案:

答案 0 :(得分: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();
}

如果您希望执行自己的函数而不是flex提供的函数,则需要定义YY_INPUT宏。