词法分析器构造工具Flex基础学习
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基础学习相关推荐
- 词法分析器生成工具flex
1.FLEX简介 单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述.FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序. +----- ...
- 派森编程软件python-零基础学习Python需要用什么开发工具?
最近有不少读者私信我,这不刚开始学习Python就开始遇到难题了,对于Python IDE都比较纠结,希望找到一些适合自己的.Python开发工具.本篇给大家分享几款Python开发工具,供正在纠结用 ...
- html5代码_干货篇!零基础学习HTML5要用到的6款开发工具
HTML5不是一种编程语言,而是一种标记语言,是程序员开发网页必用的一种开发工具.目前来说HTML5技术是非常火爆的,而且有专家预估在未来的10年HTML技术都不会过时.HTML5前景好,来学HTML ...
- 小强软件测试_小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程...
小强老师零基础学习软件测试视频教程 理论篇+自动化篇+工具篇+实战等零基础课程 1.jpg (53.32 KB, 下载次数: 0) 2017-10-5 09:33 上传 2.jpg (49.08 KB ...
- 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...
视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...
- 我的Go+语言初体验——(4)零基础学习 Go+ 爬虫
我的Go+语言初体验--(4)零基础学习 Go+ 爬虫 "我的Go+语言初体验" | 征文活动进行中- Go+ 语言非常适合编写爬虫程序,具有并发机制完善.并发数量大.占用资源少. ...
- java 注解 对象_Java基础-学习使用Annotation注解对象
Java基础-学习使用Annotation注解对象 注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某 个时刻非常方便地使用这些数据 1-1:基本语法 Java S ...
- 利于前台开发的两大工具flex和vue
2019独角兽企业重金招聘Python工程师标准>>> 1 简介 今次给大家安利的这两种工具,flex当为页面显示布局中很强大的一个属性,属于css范畴. 而vue则属于一种js插件 ...
- 【Java】Java零基础学习笔记
文章目录 前言 思维导图 前期准备 卸载JDK 安装JDK Hello,world 可能遇到情况 java程序运行机制 IDEA的安装 java基础部分 基础语法 运算符 包机制 javaDoc文档手 ...
最新文章
- 【转】不分主副卡!全网通5.0时代到来
- 解决ie7不支持after、before的方法
- 组合部分标签向量并累加成完整向量
- mysql不兼容_mysql5.7 不兼容问题
- P2181 对角线(python3实现)
- JS中格式化数据保留两位小数
- android 调出键盘表情_如何在Android的G板键盘中搜索表情符号和GIF | MOS86
- Python3批量转换文本文件编码
- key php 转小写_PHP开发常识
- 大快搜索获评“2018中国大数据基础软件领域领军企业”
- 通达信标记符号_通达信49个图标,高手指教,通达信软件里的股票标记符号,能增加吗...
- iOS 获取汉字【简体中文】笔画数
- 测试前的准备:搭建测试环境
- linux mentohust dhcp,Ubuntu下Mentohust的配置
- PyTorch笔记 - Dropout: A Simple Way to Prevent Neural Networks from Overfitting
- python-day11函数的作用
- Debain8 Tomcat8 JDK8 实现SSL双向验证
- MOOC 形势与政策 2020年9月
- Excel破解工作表保护密码
- 参禅静坐--虚极静笃--快速恢复脑力体力