zoukankan      html  css  js  c++  java
  • 翻译器DIY它———算在英文文本中的单词数,字符和行数

    咳咳。这部分应该是序列化编译器DIY的,然而,在这样做DIY第一次使用前flex 为了练练手,对于后者的理解是有帮助。

    在word 我经常看到一个字计数功能,因此,它是如何实现,当然,首先想到的是要经过整个文本换行和空格分析字符串,。但是能不能简单点了,事实上对文本做单词分析,大家都知道怎么做,难得地方可能就是代码的实现了。那么如今假设使用正則表達式来实现的话,那么一切问题就Over 了。

    环境:ubuntu(当然装了flex的windows和mac也能够)

    原码:

    %{
    unsigned long chars=0;
    unsigned long words=0;
    unsigned long lines=0;
    %}
    
    %%
    [a-zA-Z]+               {words++;chars+=strlen(yytext);}
    [a-z-A-z]+             {words++;chars+=strlen(yytext);}
    [0-9]+                  {words++;chars+=strlen(yytext);}
    [.|,|| |	|
    ]        {chars++;}
    [
    ]                    {lines++;chars++;}
    %%
    
    int main()
    {
       char filename[100];
       printf("统计一个英文文件里字符、单词、行数。
    ");
       printf("请输入要计算的文件名称:");
       scanf("%s",filename);
       yyin=fopen(filename,"r");
       printf("開始进行统计...
    ");
       printf("没有定义的字符:");
       yylex();
       printf("
    字符数:%ld
    ", chars);
       printf("单词数:%ld
    ", words);
       printf("行数  :%ld
    ", lines);
       return 1;
    }
    int yywrap()
    {
        return 1;
    }

    那么解释第一个正则式[a-zA-Z]+  表示一个或者多个由大写和小写字母组成的单词

    [a-z-A-z]+             对于特殊的中间加"-"的单词

    [0-9]+                 数字集合

    [.|,|| | | ]          特殊符号集合

    在编写完上述代码之后,那么直接用flex 进行编译。将得到一个.c文件,接着对C文件编译生成二进制代码执行就可以。

    測试文本:

    my name is te-name
    %%%


    測试结果:


    统计一个英文文件里字符、单词、行数。
    请输入要计算的文件名称:test.txt
    開始进行统计...
    没有定义的字符:%%%
    字符数:20
    单词数:4
    行数  :2




    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    区块链技术驱动金融.mobi
    ProcessExplorer 工具下载
    免费的论文查重网站
    接口可以继承接口吗?
    比较中的自动拆装箱
    Java语言中的异常处理
    Java类加载过程
    通过反射访问父类的私有成员
    final关键字详解
    MVC 控制台 +log4net 存入数据库
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4643724.html
Copyright © 2011-2022 走看看