📌  相关文章
📜  Lex 程序打印给定输入文件中的总字符、空格、制表符(1)

📅  最后修改于: 2023-12-03 15:17:18.978000             🧑  作者: Mango

用Lex程序统计输入文件中的字符、空格、制表符

在计算机科学中,Lex 是一个用于生成词法分析器程序的工具,它可以将文本文件转换成符合自己的词法规则的输入流,再对这个输入流进行分析和处理。本文将使用 Lex 程序来统计给定输入文件中的字符、空格、和制表符数量。

程序实现步骤
  1. 创建一个 .l 文件,写入以下代码:
%{
   int char_count = 0;
   int space_count = 0;
   int tab_count = 0;
%}

%%
.                    {char_count++;}
[[:space:]]          {space_count++;}
[\t]                 {tab_count++;}
\n                   {}
%%

int main(int argc, char *argv[]) {
   yylex();
   printf("字符数:%d\n空格数:%d\n制表符数:%d\n", char_count, space_count, tab_count);
   return 0;
}

该程序使用了三个变量 char_countspace_counttab_count 来分别存储字符、空格、制表符的数量。在 %% 之间定义了三个正则表达式,分别通过 .[[:space:]]\t 匹配了任意字符、空格、和制表符。在每次匹配到这些字符时,相应的计数器就会加 1。main() 函数调用了 yylex() 函数来启动 Lex 程序的解析过程,最后通过 printf() 将统计结果输出到屏幕上。

  1. 在终端上执行以下命令,将 .l 文件编译成可执行文件:
lex your_program.l
gcc lex.yy.c -o your_program
  1. 运行程序,并指定需要分析的文本文件:
./your_program input_file.txt

程序会输出文本文件中字符、空格、制表符的总数。

程序测试

为了测试该程序的正确性,我们编写如下两个测试用例:

测试用例 1

给定一个名为 test1.txt 的文件,它的内容如下:

Hello world! Are you okay?

运行程序,输入以下命令:

./your_program test1.txt

程序将输出:

字符数:28
空格数:6
制表符数:0
测试用例 2

给定一个名为 test2.txt 的文件,它的内容如下:

This    is a
        test.

其中,有多个空格和制表符。运行程序,输入以下命令:

./your_program test2.txt

程序将输出:

字符数:22
空格数:6
制表符数:2
总结

本文介绍了如何使用 Lex 程序来统计给定输入文件中字符、空格、制表符的数量。通过编写测试用例,我们验证了程序的正确性。