0

如何从 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 输入函数得到执行。

4

1 回答 1

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

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

于 2010-05-10T08:12:44.753 回答