词法分析程序统计字符和行数

利用lex的工具进行词法分析程序统计字符和行数,首先我们要先去写一个lex描述文件,设置辅助定义部分,规则部分和用户子程序部分,其中lex工具是一个词法分析程序的自动构造工具

lex描述文件部分如下所示

%{
    int num_lines=0,num_chars=0;
%}
%%
\n {++num_lines;++num_chars;}
. {++num_chars;}
%%
main(){
    yylex();
    printf("# of lines=%d,#of chars=%d\n",num_lines,num_chars);
}
  • 然后我们打算用命令行输入lex count.l命令,其中count.l是lex的描述文件名,然后会生成一个lex.yy.c文件
  • 然后我们输入cc -o count lex.yy.c -ll命令,其实这里就是再去利用编译器clang(只是终端命令使用了cc,但其实这只是一个链接指向的是clang编译器)去对lex.yy.c进行编译,选项-o count指令了可执行文件名为count,不指定默认为a.out,-ll是lex库文件的选项,其中,-ll表示链接lex的相关库文件,要想编译时不带-ll选项,就必须实现main函数和yywrap函数(return 1即可)。
  • 之后我们就去指向这个可执行文件,使用./count < count.l 其中输入的参数就是count.l的文本,执行结果是输出文件count.l中文本的行数和字符数

执行结果如下所示

这里写图片描述

如果我们自己去创建了一个abc.c文件,然后我们通过这个构造的词法分析程序去分析其的字符数和换行数的话结果如下所示

首先我们看下我们abc.c文件的内容

这里写图片描述

输出结果如下所示

这里写图片描述

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80571102