flex工具学习一

flex是一个生成词法分析器的工具,它可以利用正则表达式来生成匹配相应字符串的C语言代码。我们将用它写一个将输入字母大小写互转的例子。

关于flex, bsion工具,建议还是linux平台安装使用比较方便,我在windows下尝试过,太麻烦。

在ubuntu下安装很简单,只要执行下列语句即可:

sudo apt-get install flex bison
flex -h
bison -h

没有报错就说明安装成功。

创建encrypt.l:

%{
    #include <string.h>
    void encrpty(void);
%}
%%
[a-zA-Z]* {
    encrpty();
}
[ \t]
. {
    fprintf(stderr, "lexical error.\n");
    exit(1);
}
%%
void encrpty(void)
{
    int len = strlen(yytext);
    int i ;
    for(i = 0; i<len; ++i)
    {
        if((yytext[i]>=‘a‘)&&(yytext[i]<=‘z‘))
        {
            yytext[i] = yytext[i] - (‘a‘ - ‘A‘);
        }
        else
        {
            yytext[i] = yytext[i] + (‘a‘ - ‘A‘);
        }
    }
    fprintf(yyout, "%s\n",yytext);
}

编译:

flex encrypt.l
gcc -o encrypt lex.yy.c -lfl 

测试:

 ./encrypt
hello world
HELLO
WORLD

编译部分的-lfl选项是连接/user/lib/libfl.a库

flex将源文件*.l转换为lex.yy.c文件。源文件包含三部分:预定义区、规则区、附加C代码区。格式大致如下:

%{
定义区(可以包含头文件、声明struct、变量、函数等)
%}

%%
规则区(由正则表达式及其后的表达式处理部分组成) 
%%

附加C代码区

源文件中[a-zA-Z]*为一个正则表达式,{encrpty();}为对该正则表达式的处理。flex会将匹配到该正则表达式的字符串会存入yytext。[ \t]匹配任意数量的空白或tab字符,其后没有跟处理,故当程序匹配到空白或tab时不会做任何处理。.匹配除\n外的任意字符,输出错误信息,并退出程序。

时间: 2024-10-17 07:46:36

flex工具学习一的相关文章

webpack前端构建工具学习总结(四)之自动化生成项目中的html页面

接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 1.安装html-webpack-plugin插件,输入命令:npm install html-webpack-plugin --save-dev 2.在webpack.config.js文件中,引入html-webpack-plugin插件 3.输入命令:npm run webpack,编译打包 可以看到在dist/js目录下新生成了一个index.html文件,并且引入了新编译生成的两个js,但此

Git版本控制工具学习

Git代码管理工具学习 分布式管理工具:git 相比较svn它更加的方便,基本上我们的操作都是在本地进行的. Git文件的三种状态:已提交,已修改,以暂存. 已提交:表示文件已经被保存到本地数据库. 已修改:修改了某个文件. 以暂存:把修改的文件放到了下次提交保存的清单中. Git只关心文件系统的整体是否发生了变化,其它的版本控制工具更多的关心文件的内容是否发生变化. Git基本的工作流程 1:在工作目录中修改某些文件,2:对修改后的文件进行快照,然后保存到暂存区域.3:提交更新,将保存在暂存区

adb 工具学习

adb (android debug bridge)简单介绍: 1.adb 是 Android SDK中所带工具.使用adb,可以在PC上操作Android设备或者模拟器 2.主要功能有: 将本地apk程序安装至Android设备或模拟器,卸载已安装的apk程序. 在Android或模拟器与PC之间上传/下载文件. 运行设备的shell. 3.adb采用 "客户机-服务器"模式.   客户机是开发机 服务器也在开发机上      daemon 运行在安卓设备上 4.常用命令 1.adb

通过编写串口助手工具学习MFC过程&mdash;&mdash;(五)添加CheckBox复选框

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (五)添加CheckBox复选框 属性:Caption用于显示文本内容.

通过编写串口助手工具学习MFC过程&mdash;&mdash;(九)自动识别串口的方法

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (九)自动识别串口的方法 网上找了一下,找到两个介绍的较详细的,可用的方法

通过编写串口助手工具学习MFC过程&mdash;&mdash;(三)Unicode字符集的宽字符和多字节字符转换

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (三)Unicode字符集的宽字符和多字节字符转换 在上一节<(二)通过&qu

通过编写串口助手工具学习MFC过程&mdash;&mdash;(六)添加Edit编辑框控件

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (六)添加Edit编辑框控件 属性说明: Auto HScroll 设置T

通过编写串口助手工具学习MFC过程&mdash;&mdash;(七)添加Tab Control控件

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (七)添加Tab Control控件 要在对话框里添加标签页,点击标签页上

通过编写串口助手工具学习MFC过程&mdash;&mdash;(四)添加ComboBox组合框

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (四)添加ComboBox组合框 ComboBox组合框有编辑框和下拉列表