Flex是一个生成词法分析器的工具,它可以利用正则表达式来生成匹配相应字符串的C语言代码,其语法格式基本同Lex相同。

单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个C语言源程序。

FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习惯上用.l表示。FLEX通过对源文件的扫描自动生成相应的词法分析函数int yylex(),并将之输出到名规定为lex.yy.c的文件中。实用时,可将其改名为lexyy.c。该文件即为LEX的输出文件或输出的词法分析器。也可将int yylex()加入自已的工程文件中使用。

LEX对源文件的格式要求非常严格,比如若将要求顶行书写的语句变成非顶行书写就会产生致命错误。而LEX本身的查错能力很弱,书写时一定注意。

LEX的源文件由三个部份组成,每个部分之间用顶行的“%%”分割,其格式如下:

定义部份
%%
规则部份
%%
用户附加C语言部份

模式宏定义实际是对识别规则中出现的正规式的辅助的影。如语言的字母可定义为:
    Letter [a-zA-Z]
数字可以定义为:
    digit[0-9]

除宏定义外,定义部分的其余代码必须用符号%{ 和 %} 括起来。另外,flex使用的C语言库文件和外部变量以及部分声明的函数,也应分别置于%{ 和 %} 之内。

写一个简单基本.l文件如下;flextest.l;

%{
#include "stdio.h"
#include "stdlib.h"
void print();
int _tmain(int argc,_TCHAR*argv[]);
int num_digit=0,num_letter=0,num_enter=0;
%}
DIGIT [0-9]
LETTER [A-Za-z] %%{DIGIT} {num_digit++;}
{LETTER} {num_letter++;} %%
int _tmain(int argc, _TCHAR* argv[])
{
yyin=fopen("ccx_test1.c","r");
yylex();
printf("num=%d,letter=%d,enter=%d",
num_digit,num_letter,num_enter);
return 0;
}
int yywrap()
{
return 1;
}

然后生成C语言代码;如果.l文件语法有错则通不过;最后生成lex.yy.c;可将此文件用到自己工程中;

由此.l文件生成的c语言文件非常大,有46k之多;

就是自己编写自己需要的词法规则,然后生成词法分析器C代码,用到自己工程中;可干多种事情;参阅此,

https://blog.csdn.net/bcbobo21cn/article/details/106193648

词法分析器构造工具Flex基础学习相关推荐

  1. 词法分析器生成工具flex

    1.FLEX简介 单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述.FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序.    +----- ...

  2. 派森编程软件python-零基础学习Python需要用什么开发工具?

    最近有不少读者私信我,这不刚开始学习Python就开始遇到难题了,对于Python IDE都比较纠结,希望找到一些适合自己的.Python开发工具.本篇给大家分享几款Python开发工具,供正在纠结用 ...

  3. html5代码_干货篇!零基础学习HTML5要用到的6款开发工具

    HTML5不是一种编程语言,而是一种标记语言,是程序员开发网页必用的一种开发工具.目前来说HTML5技术是非常火爆的,而且有专家预估在未来的10年HTML技术都不会过时.HTML5前景好,来学HTML ...

  4. 小强软件测试_小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程...

    小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程 1.jpg (53.32 KB, 下载次数: 0) 2017-10-5 09:33 上传 2.jpg (49.08 KB ...

  5. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

    视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...

  6. 我的Go+语言初体验——(4)零基础学习 Go+ 爬虫

    我的Go+语言初体验--(4)零基础学习 Go+ 爬虫 "我的Go+语言初体验" | 征文活动进行中- Go+ 语言非常适合编写爬虫程序,具有并发机制完善.并发数量大.占用资源少. ...

  7. java 注解 对象_Java基础-学习使用Annotation注解对象

    Java基础-学习使用Annotation注解对象 注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某 个时刻非常方便地使用这些数据 1-1:基本语法 Java S ...

  8. 利于前台开发的两大工具flex和vue

    2019独角兽企业重金招聘Python工程师标准>>> 1 简介 今次给大家安利的这两种工具,flex当为页面显示布局中很强大的一个属性,属于css范畴. 而vue则属于一种js插件 ...

  9. 【Java】Java零基础学习笔记

    文章目录 前言 思维导图 前期准备 卸载JDK 安装JDK Hello,world 可能遇到情况 java程序运行机制 IDEA的安装 java基础部分 基础语法 运算符 包机制 javaDoc文档手 ...

最新文章

  1. 【转】不分主副卡!全网通5.0时代到来
  2. 解决ie7不支持after、before的方法
  3. 组合部分标签向量并累加成完整向量
  4. mysql不兼容_mysql5.7 不兼容问题
  5. P2181 对角线(python3实现)
  6. JS中格式化数据保留两位小数
  7. android 调出键盘表情_如何在Android的G板键盘中搜索表情符号和GIF | MOS86
  8. Python3批量转换文本文件编码
  9. key php 转小写_PHP开发常识
  10. 大快搜索获评“2018中国大数据基础软件领域领军企业”
  11. 通达信标记符号_通达信49个图标,高手指教,通达信软件里的股票标记符号,能增加吗...
  12. iOS 获取汉字【简体中文】笔画数
  13. 测试前的准备:搭建测试环境
  14. linux mentohust dhcp,Ubuntu下Mentohust的配置
  15. PyTorch笔记 - Dropout: A Simple Way to Prevent Neural Networks from Overfitting
  16. python-day11函数的作用
  17. Debain8 Tomcat8 JDK8 实现SSL双向验证
  18. MOOC 形势与政策 2020年9月
  19. Excel破解工作表保护密码
  20. 参禅静坐--虚极静笃--快速恢复脑力体力

热门文章

  1. python编程基础人民邮电出版社_Python编程基础与应用
  2. 箭头函数中的this的使用
  3. java用重载实现获取元素的数据类型
  4. Appium 移动端自动化 - Android SDK连接安卓手机,adb连接一加8手机USB调试实例演示,连接一加8手机不显示USB调试选项问题排查
  5. CTFshow 命令执行 web40
  6. 第3周实践项目1 顺序表的基本运算
  7. sdut-1153 C语言实验——求两个整数之中较大者
  8. pyqt入门教程(一)
  9. 异步爬虫(爬取小说30秒12MB!)Python实现
  10. 3行代码实现从excel中读取出某列元素为所想要的元素集合中的所有行