深入探索Flex与Bison:从程序实现到语法解析
1. 大型Flex程序示例与练习
在实际编程中,我们可能会遇到需要处理特定目录下文件的情况。以下是一个大型Flex程序示例,其主要功能是包含当前程序特定的同一目录下的文件,同时跳过其他目录的库文件。
int
main(argc, argv)
int argc;
char **argv;
{
int i;
if(argc < 2) {
fprintf(stderr, "need filename\n");
return 1;
}
for(i = 1; i < argc; i++) {
if(newfile(argv[i]))
yylex();
}
printrefs();
return 0;
}
这个程序的核心逻辑是:在命令行参数少于2个时,会输出错误信息并退出;否则,会依次处理每个文件,调用 newfile 函数,如果成功则调用 yylex 函数,最后调用 printrefs 函数。
为了更好地理解和掌握相关知识,这里提供了几个练习:
- 练习1 :示例2 - 3每次匹配一个字符,为什么不使用 ^.*\n 这样的模式一次匹配一行呢?请考虑 ^.* 无法工作的原因,并给出能匹配更大文本块的模式或模式组合。
- 练习2 :词频统
超级会员免费看
订阅专栏 解锁全文
2

被折叠的 条评论
为什么被折叠?



