所以我使用flex从我的lex代码生成ac文件,然后使用gcc创建相应的实际解析器.exe.但是,我无法弄清楚如何让它从我自己输入的输入以外的任何东西中读取.我试图让它解析一个巨大的字典文件.有人可以帮忙吗?
尝试将以下代码添加到*.l文件中.
int main(int argc, char *argv[])
{
yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}
Run Code Online (Sandbox Code Playgroud)
你有两种解决方法.第一种是使用命令提示<操作重定向标准输入的输入:
> parser.exe < some_file.txt
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是让程序打开文件,并告诉词法分析器文件是什么.有关它的更多信息,请参阅Flex手册.重要的功能是yy_create_buffer和yy_switch_to_buffer.
将@Eliko添加到上述答案中,同时将yacc / bison与flex一起使用时,可以FILE *yyin;在grammar.y文件的全局部分中进行定义。extern FILE *yyin默认情况下,生成的lex.yy.c中的定义是。因此,在您的中grammar.y,执行以下操作:
/* Some other global definitions */
FILE *yyin;
%%
/* Grammar rules*/
/* Grammar rules*/
%%
void main(int argc, char **argv) {
/* Process command line args*/
yyin = fopen("input.c", "r");
yyparse();
fclose(yyin);
return 0;
}
Run Code Online (Sandbox Code Playgroud)