LEX 教程

news/2024/11/25 1:02:43/

LEX简介

LEX是LEXical compiler 的缩写,是UNIX环境下非常著名的工具软件,其主要功能是根据LEX源程序生成一个用C语言描述的词法分析程序(scanner)。

LEX源程序是词法分析程序的规格说明文件,文件名约定为lex.l,经过LEX编译程序的编译,生成一个C语言程序lex.yy.c。若用C语言作为编译程序的实现语言,则lex.yy.c可以和其他源文件一起编译,生成编译程序的目标程序。若用C语言编译程序对lex.yy.c进行单独编译,可生成目标文件lex.yy.o,或直接生成可执行程序a.out。目标文件lex.yy.o作为编译程序目标代码的组成部分,可以和其他高级语言或汇编语言产生的目标代码连接。词法分析程序a.out运行时,可以将输入的字符串转换成相应的记号序列。

下图展示了LEX生成词法分析程序的流程:

LEX生成词法分析程序的流程

LEX源程序的结构

LEX程序的组成部分:

  1. 声明
    声明部分包括变量的声明,符号常量的声明和正则表达式定义。
    正规定义中定义的名字可以出现在翻译规则的正规表达式中。
    希望出现在lex,yy.c中的C语言声明语句用符号"%{"和“%}”括起来,如
%{#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#include"y.tab.h"typedef char * YYSTYPEchar * yylval
%}

下面是关于名字delim,ws,letter, digit以及标识符 id的正规定义,这些名字都可以在翻译规则部分的正规表达式中出现。

dilim [\t\n]
ws {dilim}+
letter [A-Za-z]
digit [0-9]
id {letter}({letter}|{digit})*
  1. 翻译规则
    翻译规则部分是由正规表达式和相应的动作组成的具有如下形式的语句序列:
p1		{action 1}
p2		{action 2}
p3		{action 3}
p4		{action 4}

其中pi是正规表达式,描述一种记号的模式;动作i是用C语言描述的程序段,表示当一个符号匹配模式pi时,词法分析程序应该做得动作

关于LEX源程序中的正规表达式的使用,参考python中的re模块不难理解

这里应该注意LEX解决冲突的两点策略:

  • 根据规则定义的先后顺序进行匹配
    解决了例子中关键字和标识符的冲突
  • 最长匹配原则
    解决了例子中诸如"<"和“<=”的冲突

也就是说,词法分析程序依此尝试每一条规则,尽可能地匹配最长的输入符号串,并且排在前面的规则的优先级高于排在后面的规则的优先级。如果有一些内容不匹配任何规则,LEX将其拷贝到标准输出。

  1. 辅助过程

对翻译规则的补充。翻译规则部分中某些动作需要调用的 过程或函数,如果不是C语言的库函数,则要在此给出具体的定义。这些过程或函数也可以在另一个程序文件中定义,然后和词法分析程序链接在一起即可。

各个部分由“%%”隔开


http://www.ppmy.cn/news/221510.html

相关文章

lex

$flex kwords.lex $gcc lex.yy.c -lfl -o kwords $cat ./kwords < kwtry.text

新文本检测算法TextFuseNet

TextFuseNet: Scene Text Detection with Richer Fused Features 自然场景中任意形状文本检测是一项极具挑战性的任务&#xff0c;与现有的仅基于有限特征表示感知文本的文本检测方法不同&#xff0c;本文提出了一种新的框架&#xff0c;即 TextFuseNet &#xff0c;以利用融合…

docker 运行过程 以及网络

一 docker运行原理 通过镜像创建容器&#xff0c;会在镜像上面创建一层可读可写的容器层。任何操作都在该层进行。 镜像是堆叠的&#xff0c;下载镜像是一层一层下载的&#xff0c;使用容器的时候会在最外层添加一层容器层 给容器分配独立的空间&#xff08;虚拟机接口用来与外…

基于国民技术N32G435的FLASH读写测试

一、测试工具&#xff1a; 1.国民技术N32G43XCL-STB开发板----主控为N32G435CB 2.创芯工坊PW200加密离线烧录器 3.PowerWriter上位机&#xff0c;配合PW200查看FLASH数据。 4.keil5 二、测试背景 现在很多的应用中都需要保存离线数据&#xff0c;例如一些传感器的校正数…

Python中的数据处理利器:Pandas DataFrame

一. 引言 在数据科学和分析领域&#xff0c;数据处理是一个至关重要的任务。而Python中的Pandas库以其强大的功能和简单易用的接口而受到广泛的欢迎。其中最核心的数据结构之一是Pandas DataFrame&#xff0c;它为我们提供了一种灵活、高效的方式来处理和操作结构化数据。本文…

港联证券|如何抓住牛股?股票为什么能够连续涨停?

牛股是指在股票市场中表现出色、股价涨幅较大的个股&#xff0c;对于投资者来说&#xff0c;抓住牛股是实现投资目标的关键之一。那么如何抓住牛股&#xff1f;股票为什么能够连续涨停&#xff1f;港联证券也为大家准备了相关内容&#xff0c;以供参考。 如何抓住牛股&#xff…

如何快速掌握Facebook运营+独立站运营基础?

在当今数字化时代&#xff0c;Facebook运营和独立站运营成为许多企业和个人创业者的关键战略。通过巧妙地结合这两个渠道&#xff0c;你可以有效地推广品牌、吸引目标受众并实现商业目标。本文将为你介绍如何快速掌握Facebook运营和独立站运营的基础知识&#xff0c;为你的业务…

全球及中国家庭用空气净化器行业供需分析及发展营利模式预测报告2022-2027年

全球及中国家庭用空气净化器行业供需分析及发展营利模式预测报告2022-2027年 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- 【修订日期】&#xff1a;2021年10月 【搜索鸿晟信合研究院查看官网更多内容&#xff01;】 2020年&#xff0c;全球家…