词条 | 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 [ \\t\]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当今的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周时间,在某知名网站上的美国国内下载数就已经达到了6万次,而他的DVD记录片更是达到8万次的下载次数。 现在Lex正在与美国Hip-Hop届的知名DJ、制作人合作他的最新混音专辑。相信不久的将来,Lex将会掀起全球性的Lex Hip-Hop旋风。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。