王朝百科
分享
 
 
 

lex

王朝百科·作者佚名  2010-03-01  
宽屏版  字体: |||超大  

lex

LEX是一个词法分析器生成工具

Lex是LEXical compiler的缩写,是Unix环境下非常著名的工具,主要功能是生成一个词法分析器(scanner)的C源码,描述规则采用正则表达式(regular expression)。描述词法分析器的文件*.l,经过lex编译后,生成一个lex.yy.c 的文件,然后由C编译器编译生成一个词法分析器。词法分析器,简单来说,其任务就是将输入的各种符号,转化成相应的标识符(token),转化后的标识符 很容易被后续阶段处理。过程如图 。

让我们来仔细研究一下这个奇妙的工具吧。先看看Lex文件的结构。 Lex文件结构简单,分为三个部分:

declarations

%%

translation rules

%%

auxiliary procedures

分别是声明,转换规则和其它函数。

声明段包括变量的声明、符号常量的声明和正则表达式声明。希望出现在目标C源码中的代码,用%{…%}扩在一起。比如:

%{

#include <stdio.h>

#include "y.tab.h"

typedef char * YYSTYPE;

char * yylval;

%}

正则表达式声明如下

/* regular definitions */

delim [

]ws +letter [A-Za-z]digit [0-9]id ()*number +(.+)?(E[+-]?+}?

这段正则表达式描述识别数(number)、标识符(id)的“规则”。过一会我们再细说正则表达式。

规则段是由正则表达式和相应的动作组成的。

p1 p2 …… pn

值得注意的是,lex 依次尝试每一个规则,尽可能地匹配最长的输入流。如果有一些内容根本不匹配任何规则,那么 lex 将只是把它拷贝到标准输出。比如

%%A {printf("you");}AA {printf("love ");}AAAA {printf("I ");}%%

编译后运行一下,

$ ./sample3AAAAAAAI love you

可以看出lex的确按照最长的规则匹配。

程序段部分放一些扫描器的其它模块,比如一些动作执行时需要的模块。也可以在另一个程序文件中编写,最后再链接到一起。 生成C代码后,需用C的编译器编译。连接时需要指定链接库。gcc的连接参数为 -ll。

正则表达式可以描述有穷状态自动机(finite automata)接受的语言,也就是定义一个可以接受的串的集.lex中用到的正则表达式的一些规则如下:

转义字符(也称操作符):

" [ ] ^ - ? . * + | ( ) $ / { } % < >

这些符号有特殊含义,不能用来匹配自身。如果需要匹配的话,可以通过引号(")或者转义符号()来指示。比如

C"++" C++

都可以匹配C++。

非转义字符:所有除了转义字符之外的字符都是非转义字符。一个非转义字符可以匹配自身。比如

integer

匹配文本中出现的integer。

通配符:通配符就是.(dot),可以匹配任何一个字符。

字符集:用一对[]指定的字符构成一个字符集。比如[abc]表示一个字符集,可以匹配a、b、c中的任意一个字符。使用 – 可以指定范围。比如[a-z]表示可以匹配所有小写字母的字符集。

重复:

* 任意次重复+ 至少一次的重复,相当于xx*? 零次或者一次

选择和分组:|符号表示选择,二者则一;括号表示分组,括号内的组合被看作是一个原子。比如(ab|cd)匹配ab或者cd。

歌手:Lex

lex

当今的Hip-Hop音乐已经显得缺乏灵感和创意了,互相合作的战略已经令这种艺术形式走进了死胡同,令这种属于街头随意性的音乐变得刻板而毫无生气。许多说唱歌手都宣称他们将玩出些新鲜的元素让这游戏更加有趣,可是多少又真正实现了这个理想呢?那么现在是时候洗刷我们的耳朵了:一个非裔美国犹太人,在奥克兰的街道上险遭枪击,状告了奥克兰警察局,哈福大学毕业,天分聪颖,灵气十足,机智诙谐,他用英语、西班牙语和中文普通话说唱,提供了全新的观点和风格。从东奥克兰德大街,到哈福校园的绿草坪,再到以色列、中国、墨西哥和更远的地方,Lex真有许多故事要述说,不惧怕分享他的经历,把各种背景与文化的人联系在一起,Lex泰然自若地在Hip-Hop音乐中营造了巨大的影响。

2005年2月,Lex在法国进行了简短的一次巡回演出,受到了热烈的好评。法国隶属Sony/BMG公司的M&M唱片向他伸除出了橄榄枝,将他签入旗下。而他加入M&M唱片后的第一个动作便是在一张精选辑Hit Masters Vol.1中与Jay-Z, Ashanti, R-Kelly和 Joe合力演出。M&M的副总裁对Lex相当满意,认为随着他在法国本土歌迷队伍的迅速壮大,他的音乐也将迅速影响到法国每一寸土地。除了在法国引起轰动之外,Lex也在日本、韩国、德国献上了精彩的演出,受到广泛的关注。

在美国,Lex也在短期内迅速取得了傲人的成绩。他在Busta Rhymes 举行的演唱会中担任开场嘉宾,在一万四千名观众面前做了精彩演出。此外他还频繁出现在美国最受欢迎的晚间电台节目Joey Reynolds Show中,以幽默诙谐的语言评论时事,从布什政府到政治性丑闻事件,无一不被他拿来以精彩的语言调侃。他的新歌“Argument”刚刚推出6周时间,在Collegester.com网上的美国国内下载数就已经达到了6万次,而他的DVD记录片更是达到8万次的下载次数。

现在Lex正在与美国Hip-Hop届的知名DJ、制作人合作他的最新混音专辑。相信不久的将来,Lex将会掀起全球性的Lex Hip-Hop旋风。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有