请输入您要查询的百科知识:

 

词条 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/15 14:35:44