深入探索Flex与Bison:从简单程序到复杂语法解析
1. Flex程序基础与实践
在开始复杂的语法解析之前,先了解一个简单但实用的Flex程序。该程序会包含当前程序特定的同一目录下的文件,同时跳过其他目录中的库文件。主程序调用 newfile 函数,如果成功则对每个文件调用 yylex 函数。
以下是主程序的代码:
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;
}
这个程序是一个较为实际的Flex程序示例,它有相对复杂的模式集合,涉及一定的文件I/O操作,并对读取的文本进行处理。
接下来是一些相关的练习题,帮助我们更好地理解和掌握Flex的使用:
1. 字符匹配问题 :示例2 - 3是逐个字符进行匹配的,为什么不使用 ^.*\n 这样的模式逐行匹配呢?请提出一个或一组能够匹配更大文本块的模式,并考虑 ^.* 不能工作的原因。
2. 大小写处理问题
超级会员免费看
订阅专栏 解锁全文
6

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



