Lex 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Lex 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 GPL
开发语言 C/C++
操作系统 Windows
软件类型 开源软件
开发厂商
地区 不详
提 交 者 不详
适用人群 未知
收录时间 2008-09-21

软件简介

Lex是Lexical Analyzer Generator的缩写,是Unix环境下非常著名的工具,主要功能是生成一个词法分析器(scanner)的C源码,描述规则采用正则表达式(regular expression)。

描述词法分析器的文件*.l,经过lex编译后,生成一个lex.yy.c 的文件,然后由C编译器编译生成一个词法分析器。词法分析器,简单来说,其任务就是将输入的各种符号,转化成相应的标识符(token),转化后的标识符 很容易被后续阶段处理。

它被设计用来对输入字符流进行词法处理。它接受一种高级的、面向问题的说明书,并用它匹配字符串中的字符、生成能够识别正则表达式的程序。正则表达式通过用户输入的代码说明书给入。Lex识别这些表达式,并且将输入流分成一些匹配这些表达式的字符串。在这些字符串的分界处,用户提供的程序片段被执行。Lex代码文件将正则表达式和程序片断关联。对每一条输入到由Lex生成程序的表达式,相应的代码片段被执行。

为了完成任务,除了需要提供匹配的表达式以外,用户还需要提供其它代码,甚至是由其他生成器产生的代码。用户提供一般程序设计语言的代码片断完成程序识别表达式。因此,用户自由编写动作时,并不影响其编写高层的表达式语言来匹配字符串表达式。这就避免迫使用户使用字符串语言来进行输入分析时,也必须使用同样的方法来编写字符处理程序,而这样做有时是不合适的。

Lex不是完整的语言,但是是一个新语言的生成器,它可以插入到各种不同的被叫做“宿主语言”的程序设计语言中。就像大多数目的语言可以生成在不同计算机硬件上运行的代码,Lex可以生成不同的宿主语言。宿主语言用于Lex生成输出代码,也用于用户插入程序片断。这使得Lex适用于不同的环境和不同的使用者。每一个应用程序可以是硬件、适用于该任务的宿主语言、用户背景和局部接口属性的直接结合。

现在,Lex唯一支持的宿主语言是C,尽管Fortran(形式为Ratfor)在过去也被支持。Lex自身存在于Unix、GCOS和OS/370上;但是Lex生成的代码可以在任何适当的编译器上使用。

展开阅读全文

评论 (0)

加载中
更多评论
暂无内容
发表于数据库专区
2015/11/02 21:40

HOWTO--Lex

Lex单独简介

0
0
发表了博客
2014/04/08 17:54

Yacc/Lex

http://www.open-open.com/lib/view/open1325299886530.html

0
0
发表了博客
2015/05/19 19:36

最简单的lex的例子

lex和yacc可以帮助你编写程序转换结构化输入。既包括从输入文件中寻找模式的简单文本搜索程序,也包括将源程序变换为最佳的目标代码的C编译程序等。 lex使用一系列对可能标记的描述,产生一个能识别那些标记的C例程(我们成为词法分析器。词法分析程序(lexer),或成为扫描程序)。 lex使用的标记描述称为正则表达式。y...

0
0
发表了博客
2012/02/18 23:19

Lex和Yacc介绍

Lex: 词法分析器。 Wiki: http://zh.wikipedia.org/wiki/Lex http://en.wikipedia.org/wiki/Lex_programming_tool 已经成为POSIX的标准了,所以一般的linux系统应该都自带了lex命令了。flex是lex的开源版本,项目主页:http://sourceforge.net/projects/flex/ (http://flex.sourceforge.net/) Flex for windows:htt...

1
2
发表了博客
2014/05/04 19:46

编译器开发-lex与yacc

一、编译器介绍 编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables) 编译器是软件开发中的核心部件,其作用是其他 任何软...

0
0
发表了博客
2016/08/02 18:38

lex和yacc快速入门

联合使用lex和yacc来生成一个四则运算器,源代码如下: 1,lex源文件calc.l: %{ #include <stdlib.h> void yyerror(char *); #include "calc.tab.h" %} %% [0-9]+ { yylval = atoi(yytext); return INTEGER; } [-+*/\n] return *yytext; [\n\t]* ;/* 去除空格 */ . yyerror("无效字符");...

0
0
发表了博客
2015/01/21 23:36

lex和yacc 入门-- 计算器

lex 是自动生成词法分析器的工具,通过输入扩展名为.l的文件,输出词法分析器的C 语言代码。 flex是增强版的lex。 yacc是自动生成语法分析器的工具,通过输入扩展名为.y的文件,输出语法分析器的C语言代码。 bison是GNU项目所发布的yacc的功能扩充版。 myclac.l myclac.y 以上代码来之《自制编程语言》 注意:默认在MAC...

1
5
发表了博客
2015/05/19 19:36

LEX学习 第二节

接着第一节中的第一个示例,我们扩展第二个示例,将词法分析程序扩展为识别不同的词性。 下面是程序示例: %{ /* * 扩展第一个示例以识别其他的词性 * */ %} %% [ \t ]+ /* 忽略空白 */; is | am | are | were | was | be | being | been | do | does | did | will | would | should | can | could | has | had | g...

0
0
发表了博客
2014/10/13 11:55

Lex - 词法分析器生成器

Lex 帮助书写其控制流由在输入流中的正则表达式的实例来导向的程序。它适合于编辑器脚本类型的变换,和为解析例程做准备工作而分解输入。

0
3
发表了博客
2018/06/08 22:47

[yacc lex] 实现一个计算器

源代码所处位置 https://gitee.com/beipiaoyizu520/lex_yacc_exercise/cal_test

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2013/01/19 21:36

说说自己最没用的专业技能

想起当初自己费很大劲啃O'Reilly那本英文影印版的《flex与bison》,结果在实际工作中从来没用到过... 大家说说自己最没用的“专业技能”有哪些?

12
0
发表了问答
2012/03/19 21:42

flex yacc bison ,gcc编译后运行出错.

词法文件: %{ /* It is a test here. */ #include "y.tab.h" #define LOOKUP 0 #define NOT_FOUND 1 int state; %} %% [\n ]+ {state=LOOKUP;} \.\n {state=LOOKUP;return 0;} ^verb {state=VERB;} ^noun {state=NOUN;} ^adj {state=ADJECTIVE;} ^adv {state=ADVERB;} ^prep {state=PREP;} ^pron {state=PRON;} ^conj {s...

2
0
发表了问答
2012/03/22 22:51

mingw下如何使用flex和bison

准备写个类似于c语言的解释器。因为希望能在vc的标准库下运行,所以准备用mingw来编译,可是怎么安装flex和bison?

2
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
17 收藏
分享
返回顶部
顶部