码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • flex&bison系列第二章:写一个简单的单词统计工具Word Counter


    系列文章目录

    flex&bison系列第一章:flex Hello World
    flex&bison系列第二章:写一个简单的单词统计工具Word Counter

    LLVM系列


    本文目录

    • 前言
    • 一、Word Counter
    • 二、编译
      • 1. 生成C代码
      • 2. 编译
    • 三、运行
    • 总结


    前言

    在此记录下基于flex写一个简单的单词统计工具(Word Counter)的过程,以备查阅。

    开发环境的配置请参考第一章 《flex&bison系列第一章:flex Hello World》。

    为简单起见,我们只统计英文单词和整数,比如“Abc”、“123”。我们可以用简单的正则表达式来识别英文单词和整数:

    1. 英文单词:[a-zA-Z]+
    2. 整数:[0-9]+

    一、Word Counter

    这个Word Counter程序要做的事很简单,具体如下:

    1. 当检测到英文单词时,把英文单词的总个数加1
    2. 当检测到整数时,把整数的总个数加1
    3. 否则,忽略不记
    4. 最终程序结束时,输出英文单词的总个数及整数的总个数

    首先,我们要写一个简单的flex脚本文件(示例):

    /*
     * word-counter.l
     */
    
    %option noyywrap
    
    %{
        int words = 0;
        int numbers = 0;
    %}
    
    %%
    
    [a-zA-Z]+   { words++; }
    [0-9]+      { numbers++; }
    
    %%
    
    int main(int argc, char **argv)
    {
        yylex();
        printf("words: %d, numbers: %d\n", words, numbers);
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    我们的例子中,比较重要的是第二部分:

    [a-zA-Z]+   { words++; }
    [0-9]+      { numbers++; }
    
    • 1
    • 2

    这两行代码分别统计了英文单词的总个数和整数的总个数。

    二、编译

    1. 生成C代码

    运行如下命令即可生成C代码(示例):

    flex word-counter.l
    
    • 1

    其生成的C代码文件名为“lex.yy.c”。

    2. 编译

    我们可以用clang对以上生成的C代码进行编译(示例):

    # Set up C++ standard library and header path for clang
    export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
    
    # Build with clang
    clang lex.yy.c -o word-counter
    
    # Or, build with gcc
    gcc lex.yy.c -o word-counter
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    以上命令会生成一个名为“word-counter”的可执行程序。

    三、运行

    可以用如下命令运行Word Counter程序(示例):

    # Use Ctrl+D to stop input
    ./word-counter
    
    • 1
    • 2

    接下来,程序会等待用户的输入。我们可以随意打一些英文单词和整数(注意用空格或回车键隔开),然后按Ctrl+D,可以看到如下输出(示例):

    > Abc 123 xY 04 
    > y 345
    > (Ctrl+D)
    > words: 3, numbers: 3
    
    • 1
    • 2
    • 3
    • 4

    当我们按Ctrl+D时,程序会输出英文单词和整数的总个数。

    总结

    我们基于flex,用C++写了一个简单的单词统计工具Word Counter,并且编译运行成功。完整源码示例请参看:
    https://github.com/wuzhanglin/flex-bison-examples

  • 相关阅读:
    【矩阵论】3. 矩阵运算与函数——张量积
    C# 深入理解事件(event)机制
    财政部《关于加强数据资产管理的指导意见》要点解析
    学习EntityFramework,实现分层架构
    中秋节静态HTML网页作业作品 大学生中秋网页设计制作成品 简单DIV CSS布局网站
    linux常用命令总结(通俗易懂,快速记忆版)
    引用与指针及数组指针与指针数组的区别实践
    【VS Code】使用 VS Code 登陆远程服务器上的 Docker 容器
    StrictMode卡顿与泄漏检测-StrictMode原理
    通胀数据迷雾期,华尔街非常确定的方向只有一个
  • 原文地址:https://blog.csdn.net/Zhanglin_Wu/article/details/126377501
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号