所以我使用 flex 从我的 lex 代码生成 ac 文件,然后使用 gcc 创建相应的实际解析器 .exe。但是,我不知道如何让它从我自己输入的输入之外的任何东西中读取。我试图让它解析一个巨大的字典文件。任何人都可以帮忙吗?
问问题
15311 次
4 回答
13
你有两种解决方法。第一种是使用命令提示符<
操作从标准输入重定向输入:
> parser.exe < some_file.txt
另一种解决方案是让程序打开文件,并告诉词法分析器文件是什么。有关它的更多信息,请参阅Flex 手册。重要的函数是yy_create_buffer
和yy_switch_to_buffer
。
于 2013-02-02T20:22:23.813 回答
11
尝试将以下代码添加到您的 *.l 文件中。
int main(int argc, char *argv[])
{
yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}
于 2013-10-29T12:34:48.903 回答
9
在@Eliko 的上述答案中添加,在将 flex 与 yacc/bison 一起使用时,您可以FILE *yyin;
在 Grammar.y 文件的全局部分中进行定义。生成的 lex.yy.c 中的定义是extern FILE *yyin
默认的。因此,在您的 中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;
}
于 2017-04-25T04:16:01.793 回答
0
在.l文件所在文件夹中的UBUNTU Position 终端中,然后键入以下内容:
flex nameOfFile.l
然后
gcc lex.yy.c
然后./a.out <nameOfFileYouWantToPass.extension
(例如./a.out <test.txt
)
.l文件和test.txt应该在同一个文件夹中
于 2020-05-28T21:48:07.523 回答