收藏 分享(赏)

第四章 词法分析.ppt

上传人:scg750829 文档编号:8138683 上传时间:2019-06-10 格式:PPT 页数:81 大小:647KB
下载 相关 举报
第四章 词法分析.ppt_第1页
第1页 / 共81页
第四章 词法分析.ppt_第2页
第2页 / 共81页
第四章 词法分析.ppt_第3页
第3页 / 共81页
第四章 词法分析.ppt_第4页
第4页 / 共81页
第四章 词法分析.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

1、词法分析程序的设计 单词的描述技术、识别机制 词法分析程序的自动构造原理。,第四章 词法分析,4.1 词法分析程序的设计,回顾 什麽是词法分析(lexical analysis)程序 又称词法分析器或扫描器,主要功能是逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。 词法分析是编译过程中的一个阶段,在语法分析前进行 。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。,词法分析程序和语法分析程序的关系,字符串源程序,词法分析,符号串源程序,图4.1a 词法分析单独作

2、为一遍,词法分析程序的任务,词法分析程序的主要任务: 扫描源程序,识别出具有独立意义的单词 词法分析程序的其他任务: 滤掉空格,跳过注释、换行符 追踪换行标志,将行号与出错信息相联系起来。 宏展开,,词法分析程序的输出格式,词法分析的输出常采用二元式: (单词类别,单词自身的值) 单词类别通常用一个整数类码或单词记号表示,单词记号比整数码含义明确。 若还需记录单词的一些其它属性值:如标识符的类别、层次等,可将这些属性统一放到符号表中,并将单词的二元式表示为: (标识符,指向该标识符所在符号表中位置的指针),词法分析程序的结构,将词法分析从语法分析部分独立出来的原因 使整个编译程序的结构更简洁、

3、清晰、条例化 改进编译效率 增加编译系统的可移植性,手工构造首先确定出能够识别程序中单词的确定的有穷自动机( DFA),然后可以采用直接编程的方法或者表驱动的方法来构造词法分析器。 借助相关工具的自动构造如:Lex编译系统,词法分析程序的常用设计方法,多数程序设计语言的单词的语法均可用正规文法来表示。 回顾: 正规文法(3型文法):任一产生式的形式都为AaB或Aa,其中AVN ,BVN ,aVT* 正规文法描述的是VT上的正规集。 例:程序设计语言中几类单词的描述规则:标识符、无符号整数、运算符。(参见课本P52),4.2 单词的描述工具-正规式,4.2 单词的描述工具-正规式,正规式(reg

4、ular expression也叫正则表达式)正规式是定义正规集的数学工具,是说明单词的模式(pattern)的一种表示法,用它描述单词符号时一般比正规文法更简洁。 正规式和正规集(即其描述的语言)的定义可以用递归的形式给出。,4.2 单词的描述工具-正规式,正规式 设是有穷字母表,并定义辅助字母表=, , | , . , *, (, ) 1.,都是上的正规式,它们所表示的正规集为, ; 2.任何a是一个正规式,若a,它所表示的正规集为a; 3.如果R1和R2是正规式,其表示的正规集分别为L1和L2,则1)正规式R1|R2或R1+R2表示的正规集为L1L22)正规式R1.R2或R1R2表示的正

5、规集为L1L23)正规式R1或R1*表示的正规集为L1*4)正规式(R)表示的正规集仍是L1,但调整优先权,使括号内的运算符优先权高于括号外的。,4. 仅有有限次使用上述三步骤而定义的表达式才是上的正规式,仅有这些正规式表示的字集才是上的正规集。,4.2 单词的描述工具-正规式,注意:不要混淆和,正则表达式描述的语言只含一个空字符串,而表示的语言不含有任何字符串。,例4.2.1: 令=a,b,则上的正规式和相应正规集为,(1) a (2) ab (3) ab (4) (ab)(ab) (5) a (6) (ab) (7) (ab)(aabb)(ab),(1) a (2) a,b (3) ab

6、(4) aa,ab,ba,bb (5) ,a,aa, 任意个a的串(6) ,a,b,aa,ab,bb 所有由 a和b组成的串(7) 上所有含有两个相继的a或两个相继的b组成的串,例4.2.2: 令=l,d,则上的正规式 r=l(ld) 定义的正规集为,程序设计语言的单词都能用正规式来定义。若两个正规式e1,e2表示的正规集相同,则称它们等价。记作:e1=e2,l,ll,ld,ldd,其中l代表字母,d代表数字, 即:字母(字母|数字) ,它表示的正规集中的每个元素的模式是“字母打头的字母数字串”,即Pascal和多数程序设计语言允许的的标识符的词法规则.,正规式服从的代数运算规律:,设r,s,

7、t为正规式,则它们满足如下运算规律: r|s=s|r r|(s|t)=(r|s)|t (rs)t=r(st) r(s|t)=rs|rt ; (s|t)r=sr|tr :或的分配律 r=r ; r=r : 是 “连接”的恒等元素 r|r=r : “或”的抽取律,一个正规语言可用正规文法表示也可用正规式表示,两者具有等价性。一般而言正规式在描述语言时比正规文法更为简洁。,正规文法和正规式的等价性,例如,用正规文法表示标识符的文法规则如下: 标识符 a|b|z |标识符a|标识符b|标识符z |标识符0|标识符1|标识符9 而采用正规表达式则为: 标识符= (a|b|c|z)a|b|z|0|1|9

8、或简写成 标识符=字母字母|数字,将上的正规式r转换成正规文法G=(VN,VT,S,P).令VT= ,产生式和VN按如下方法确定: 选择一非终结符S生成类似产生式的形式Sr,并将S定为文法G的识别符。 若x,y是正规式,对形如Axy的正规式产生式,重写成:AxB, By,B为新选的非终结符。 对形如Ax*y的正规式,重写成: AxB, Ay, BxB, By, B为新选的非终结符。 对形如Ax|y的正规式,重写成: Ax, Ay。 不断利用上述规则做变换,直到每个产生式都符合正规文法的形式即可。,正规文法和正规式的等价性,例4.2.3:将r=a(a|d)*转换成相应的正规文法,正规文法和正规式

9、的等价性,将正规文法转换为正规式 基本上是正规式到正规文法转换过程的逆过程。可反复采用以下三条规则,直到只剩下一个开始符号定义的正规式为止。 产生式AxB, By对应正规式A=xy; 产生式AxA|y对应正规式A=x*y; 产生式Ax, Ay对应正规式A=x|y;,正规文法和正规式的等价性,例4.2.4:将GS转换为正规式 SaA Sa AaA AdA Aa Ad,正规文法和正规式的等价性,解:由文法GS得 S=aA|a A=(aA|dA)|(a|d) 则 S= a(a|d)*(a|d)|a= a(a|d)*(a|d)| )= a(a|d)*,4.3 有穷自动机,有穷自动机(有限自动机)作为一

10、种识别装置,它能准确地识别正规集(即正规式所表示的集合)。有穷自动机为词法分析程序的自动构造提供了有效的方法和工具。有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata: DFA)不确定的有穷自动机(Nondeterministic Finite Automata: NFA),4.3 关于有穷自动机将主要讨论如下问题,确定的有穷自动机DFA 不确定的有穷自动机NFA NFA的确定化 DFA的最小化,一、确定的有穷自动机DFA,DFA定义: 一个确定的有穷自动机(DFA)M是一个五元组: M= (K, f, S, Z), 其中 1.K是一个有穷集,它的

11、每个元素称为一个状态; 2.是一个有穷字母表,它的每个元素称为一个输入符号,所以也称为输入符号表;,DFA定义 (续): 3. f是转换函数,是在KK上的单值映射,即如存在f(ki, a)=kj, (kiK,kjK) ,则当前状态为ki且输入符为a时,将转换为下一个状态kj,我们把kj称作ki的一个后继状态; 4. SK是唯一的一个初态; 5. Z K是一个终态集,终态也称可接受状态或结束 状态。,一、确定的有穷自动机DFA,一、确定的有穷自动机DFA,例4.3.1: DFA M=(S,U,V,Q,a,b,f,S,Q)其中f定义为: f(S,a)=U f(V,a)=U f(S,b)=V f(V

12、,b)=Q f(U,a)=Q f(Q,a)=Q f(U,b)=V f(Q,b)=Q,上例中DFA 的状态图表示,b,一、确定的有穷自动机DFA,上例中DFA 的矩阵表示,0 0 0 1,一、确定的有穷自动机DFA,概念:*上的符号串t被DFA M接受,一、确定的有穷自动机DFA,定义1: 对*中的任何符号串t,若存在一条从初态结点某一终态结点的道路,且这条道路上所有弧连接成的符号串等于t,则称t可为DFA M所接受,若M的初态同时又是终态结点,则空字可为M所接受。 定义2: 若t*, f(S,t)=P,其中S为DFA M的开始状态, PZ, Z为终态集,则称t 可为M所接受(识别)。 DFA

13、M所能接受的符号串的全体记为L(M)。 DFA的确定性表现在 f: KK是一个单值函数。,一个输入符号串t (表示为t1 tx), 其中t1, tx *, 则t在DFA M上运行的定义为: f(Q, t1 tx)=f(f(Q, t1), tx) 其中 QK, f(Q, )=Q。,一、确定的有穷自动机DFA,概念:*上的符号串t被DFA M上运行,上一个符号串集V是正规的,当且仅当存在一个上的DFA M ,使得V=L(M)。,一、确定的有穷自动机DFA,例4.3.2: 证明t=baab被下图的DFA所接受,f(S,baab)=f(f(S,b),aab) = f(V,aab)= f(f(V,a),

14、ab) =f(U,ab)=f(f(U,a),b) =f(Q,b)=Q Q属于终态。得证。,DFA行为的程序模拟. DFA M=(K,f,S,Z)的行为的模拟程序 K:=S; c:=getchar; while ceof do K:=f(K,c);c:=getchar; if K is in Z then return (yes)else return (no),一、确定的有穷自动机DFA,二、不确定的有穷自动机NFA,NFA定义:NFA N=(K, , f, S, Z),其中K为有穷状态集, 为有穷输入字母表,f为K 到K的子集的映射, SK是一个非空初态集,ZK为终态集。,NFA与DFA的区

15、别主要有: NFA中状态转换函数为多值函数。 NFA中起始状态可以有多个,但从正规文法出发构造的NFA起始状态是唯一的。,二、不确定的有穷自动机NFA,例4.3.3: NFA N=(S,P,Z,0,1,f,S,P,Z) 其中 f(S,0)=P f(S,1)=S,Z f(P,1)=Z f(Z,0)=P f(Z,1)=P,矩阵表示,二、不确定的有穷自动机NFA,类似DFA, NFA N=(K,f,S,Z)也有如下定义:,符号串 t 在NFA N上运行一个输入符号串t (将它表示成Tt1的形式, 其中T, t1*) 在NFA N上运行的定义为:f(Q, Tt1)=f ( f(Q, T), t1) 其

16、中QK. 符号串 t 被NFA N接受若f(S0, t)=P, 其中t* , S0 S, PZ, 则称t为NFA N所接受 (识别),二、不确定的有穷自动机NFA,符号串 t 被NFA N接受也可以这样理解,对于任何一个符号串t (t*) ,若存在一条从某一初态到某一终态的道路,且这条道路上所有弧的标记字依序连接成的串(不计弧)等于t,则称t为NFA N所接受。,二、不确定的有穷自动机NFA,有了上述定义后,实际上也就是对NFA的转换函数 f 进行了如下扩充: f: K K的子集 f: K* K的子集,二、不确定的有穷自动机NFA,例4.3.4:下列符号串哪些可以被图中NFA所接受?111 1

17、010001 00 01100,二、不确定的有穷自动机NFA,例4.3.4:下列符号串哪些可以被图中NFA所接受?111 1010001 00 01100,若将NFA N所能接受的符号串的全体记为L(N),则有如下结论: 对每个NFA N存在着与之等价的DFA M,使得L(M)=L(N)。并且最小的DFA M是唯一的。 将NFA转换成等价的DFA的算法-子集法。,二、不确定的有穷自动机NFA,有关状态集合I的两个运算: 1. 状态集合I的-闭包,记为-closure(I),定义为一状态集,是由状态集I中的任何状态S经任意条弧而能到达的状态所构成的集合。 状态集合I的任何状态都属于-closur

18、e(I)。 2. 状态集合I的a弧转换,记为move(I,a),是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。,三、 NFA的确定化,三、 NFA的确定化,有关状态集合I的运算实例,计算下列各式的值 1) move(1,2,a) 2) -closure(5,3,4),运算结果: 1) =5,3,4; 2) =2,3,4,5,6,7,8;,例4.3.5: 若 I1= 1,则 -closure(I1)=1,2; move(I1,a)=4,5;,三、 NFA的确定化,子集法: 假设NFA N=(K,f,K0,Kt),按如下方法可构造一个DFA M=(S,d,S0,St),使得L(M)=

19、L(N): 1. M的状态集S由K的一些子集组成。用S1,S2 ,., Sj表示S的元素,其中S1, S2,. Sj是K的状态。并且约定:状态S1, S2,. Sj是按某种规则排列的,即对于子集S1, S2= S2, S1,来说,S的状态就是S1, S2;,2 M和N的输入字母表是相同的,即是; 3 转换函数是这样定义的: d(S1,S2,. Sj, a)= R1,R2 , . , Rt 其中 R1,R2 , . , Rt= -closure( move(S1,S2 ,. Sj, a) ) 4 S0=-closure(K0)为M的开始状态; 5 St=Si, Sk ,., Se, 其中Si,

20、Sk ,., SeS且 Si,Sk,., SeKt ,三、 NFA的确定化,构造NFA N中状态K的子集的算法:假定所构造的子集族为CS,即CS=(T1, T2,. Ti),其中T1, T2 , . , Ti为状态K的子集,则其构造步骤如下:1. 令-closure(K0)为CS中唯一成员,且它是未被标记的。 2. while (CS中存在尚未被标记的子集T) do 标记T;for 每个输入字母a do U:= -closure(move(T, a);if U不在CS中 then 将U作为未标记的子集加在CS中 ,三、 NFA的确定化,例4.3.6: 将下图NFA N=(K,f,K0,Kt)转

21、换为等价的DFA M 其中M=(S,d,S0,St)。,三、 NFA的确定化,表1 NFA状态子集的构造结果,三、 NFA的确定化,转换为DFA后的状态图,四、DFA的化简,结论:对于任何给定的DFA,都存在一个与之等价的最少状态DFA,并且该最少状态DFA是唯一的。 最少状态DFA应满足:1). 没有多余状态;2). 没有等价状态。 多余状态:从自动机的开始状态出发,任何输入串也不能到达的状态;或者是没有通路到达终态的状态。 两个状态s和t等价是指它们具备以下特性: 一致性(兼容性): 即两状态同是终态或同是非终态 蔓延性: 对所有输入符号,状态s和t必须转换到等价的状态里。或者说从两状态出

22、发所接受的符号串集合相同。,四、DFA的化简,例4.3.7: 判断下图中那些状态是多余状态。,四、DFA的化简,例4.3.8: 判断下图中那些状态是等价状态。,解:因为f(1,a)=3,f(2,a)=3,所以状态1和状态2是等价的,上图DFA中D、E、F、G为等价状态。,四、DFA的化简,例4.3.9: 判断下图中那些状态是等价状态。,结论:一个DFA可以通过消除多余状态和合并等价状态而转换成一个与之等价的最小DFA。 DFA的最小化算法(分割法) 算法的核心思想:把一个DFA的状态分成一些不相交的子集,使得任何不同的两子集的状态都是可区别的,而同一子集中的任何两个状态都是等价的。 算法具体步

23、骤:以DFA M=(K,f,k0,kt)的最小化为例1. 构造自动机的初始划分:终态集kt和非终态集K-kt两组,四、DFA的化简,2. 对各状态集按下面方法进行划分,直到所有状态集合不再产生新的划分为止。设第m次划分将K分成n个状态集合(K=S1S2Sn)。对状态集合Si 中的各状态逐一检查,设q1,q2是状态集合Si中的两个状态,对任意输入符号a ,有f(q1,a)= S, f(q2,a)=S”,若状态S和S”不属于同一状态集,则将q1和q2分为两个集合。 3. 重复第2步,直到所有状态集合都不能划分。 4. 将每个状态集中的等价状态合并成一个状态。 5. 删除多余状态。,四、DFA的化简

24、,四、DFA的化简,对S1=0,1,2划分:因为f(0,a)=1,f(1,a) =3,f(2,a) =1,故1,2不属于同一状态集, 所以将S1分成S3=0,2,S4=1 对S3=0,2划分:因为f(0,b)=2,f(2,b) =4, 故S3应分成S5=0,S6=2 对S2=3,4划分:因为f(3,a)=3,f(4,a) =3,f(3,b)=4,f(4,b) =4, 故3,4属于同一状态集, 所以S2不能划分, 也就是说状态3和4等价。 至此,不再能继续划分,例4.3.10: 对下图DFA进行化简。,解:首先将状态集合分成非终止状态集S1和终止状态集S2,即S1=0,1,2;S2=3,4,四、

25、DFA的化简,最终得到不能划分的状态集有: S2=3,4, S4=1,S5=0,S6=2 每个状态集留一个状态得: S2=3, S4=1,S5=0,S6=2 所以化简后的DFA如下图所示,四、DFA的化简,0:A,B,C,D,E,F,G 1:A,B,C 2:,a,A,C,B,D,E,F,G,b,A,C,例4.3.11: 对例4.3.9的DFA进行化简。,至此,不能再进行划分,所得状态集为A,S,B,C,D,E,F,每个状态集留一个状态后得到化简后的DFA如右图所示,正规式和有穷自动机的等价性表现在以下两个方面: 1. 对于上的一个正规式R,可以构造一个上的NFA N,使的L(N)=L(R)。

26、2. 对于上的一个NFA N,可以构造一个上的正规式R,使得L(R)=L(N)。,4.4 正规式和有穷自动机的等价性,4.4.1 为上的正规式R构造相应的NFA M,“语法制导”构造方法 首先将正规式分解成一系列子表达式,然后按下列规则来构造NFA M: 1) 基本正规式, a (a) 对应的NFA为:,图4.4.1 ,a 对应的状态转换图,2) 连接: 设R1和R2都是正规式,则构造与正则表达式R1R2等价的NFA如图4.4.2:,4.4.1 为上的正规式R构造相应的NFA M,图4.4.2 R1.R2的状态转换图,3) 选择: 设R1 和R2 都是正规式,则构造与正则表达式R1|R2等价的

27、NFA如图4.4.3:,图4.4.3 R1|R2的状态转换图,4.4.1 为上的正规式R构造相应的NFA M,4) 重复: 设R是正规式,则构造与正规式R*等价的NFA如图4.4.4,图4.4.4 R*的状态转换图,对于任何正规式,都可根据上述规则构造出等价的NFA,4.4.1 为上的正规式R构造相应的NFA M,例4.4.1构造出与正规式R=(a)*(|b)(a|b)*等价的NFA。 解:设初始状态为0,目标状态为1,将整个正则表达式(a)*(|bb)(a|b)* 看成一个整体,则状态图如图4.4.5所示,图4.4.5 正规式到NFA转换图1,因R由(a)*, ( |bb), (a|b)*连

28、接而成,故展开连接后如图4.4.6,图4.4.6 正规式到NFA转换图2,4.4.1 为上的正规式R构造相应的NFA M,将重复展开后如图4.4.7所示,图4.4.7 正规式到NFA转换图3,将选择展开后,最终得到的NFA状态图如图4.4.8所示,图4.4.8 正规式到NFA转换图4,例4.4.2: 构造正规式 (0|1)*(000|111)(0|1)* 对应的NFA,并对其进行化简。,4.4.1 将NFA M变为相应的正规式R,由NFA M构造正规式相对较容易,处理方法与根据正规式构造NFA M的方法互逆。具体如下: 1 添加两个新的结点S和T,将S与NFA M上的所有初态结点相连,将T与所

29、有终态结点相连,所有连接弧线上均标记为,从而使NFA M只有一个初态S和一个终态T。 2 逐步去掉NFA M中的结点,直到只剩下结点S和T。在去掉结点的过程中,逐步用正则表达式来标记弧线。去掉结点的规则如下:, 连接:设R1 和R2 都是基本正则表达式,去掉结点,用弧线直接连接结点1和3,弧线上标记R1R2,如图4.4.9所示:,4.4.1 将NFA M变为相应的正规式R, 选择: 设R1和R2 都是正规式,去掉标记为R1和R2的弧线并用一根弧线直接连接结点1和2,弧线上标记R1|R2。, 重复: 设R是正规式,则构造与R*等价的NFA如图4.4.11,图4.4.10 由NFA构造正规式R1|

30、R2,例题4.4.1的逆过程即可作为此处实例来学习,4.5 正规文法和有穷自动机的等价性,从正规文法G直接构造一NFA N 取N的字母表和G的终结符集相同。 为G的每个非终结符生成N中的一状态,G的开始符对应N的开始状态。 增加一个新状态Z作为NFA的终态。 对G中形如AtB的规则,构造一转换函数f(A,t)=B 对G中形如At的规则,构造一转换函数f(A,t)=Z 反复使用上述规则对文法G中的规则进行替换即可得到等价的NFA N。,4.5 正规文法和有穷自动机的等价性,例题1:,从NFA N构造正规文法G 对转换函数f(A,t)=B,可写一产生式 AtB 对可接受状态Z,增加一产生式Z 有穷

31、自动机的初态对应文法开始符,字母表为文法的终结符集。,4.5 正规文法和有穷自动机的等价性,例题2:,4.5 正规文法和有穷自动机的等价性,4.6 词法分析程序的构造,根据DFA构造词法分析程序的方法 直接编程的方法 表驱动的实现方法 借助自动生成器Lex的构造方法,1. 直接编程的词法分析器 直接编程的词法分析器是将DFA识别过程转化为程序,即用程序来模拟DFA的行为。可按下列步骤将DFA转换成程序流程图: 1) 初始状态对应程序的开始; 2) 终止状态对应程序的结束 3) 状态转移对应条件语句或分支选择语句; 4) 状态图的环对应程序中循环语句; 5) 终态返回时,应满足最长匹配原则。,4

32、.6.1 根据DFA构造词法分析程序的方法,4.6.1 根据DFA构造词法分析程序的方法,这种方法适合手工实现,编写出的词法分析程序比较精简,分析速度快。但这种词法分析程序与要识别的语言单词密切有关,通过程序的控制流转移来完成对输入字符的响应,程序中的每一条语句都与要识别的单词符号有关,一但语言的单词符号集发生变化,则要重新编写程序。 故这种方法仅适合编写比较简单的词法分析程序。,4.6.1 根据DFA构造词法分析程序的方法,2. 表驱动的词法分析程序表驱动的词法分析程序的模型如图4.6.1所示。它由输入字符序列、分析表和控制程序组成。分析表就是DFA的状态转换矩阵,如图4.6.2。控制程序有

33、两个参数,一个参数接受扫描的字符a,另一个参数为DFA的状态i。,图4.6.1 表驱动的词法分析程序的模型,图4.6.2 分析表,4.6.1 根据DFA构造词法分析程序的方法,其控制程序的算法是: 1) 在输入字符序列后面加一个字符#,叫结束符。将扫描指针设在输入序列的最左端,状态参数i设为开始状态。 2) 扫描下一字符a,如果是结束符#,则停止;否则,根据状态参数i和输入的字符a查分析表,将状态参数i设为查分析表(i,a)后得到的状态。 3) 如果i是终态,则表示识别出一个单词转到4;否则转到2。 4) 处理识别出的单词,输出单词符号。状态参数i设为开始状态,转到2。,4.6.1 根据DFA

34、构造词法分析程序的方法,表驱动的词法分析程序是根据分析表的内容进行操作,与要识别的单词符号无关, 是一种典型的数据与操作分离的工作模式。构造不同的词法分析程序实质上是构造不同的分析表,而控制程序是不变的。这为词法分析程序的自动生成提供了极大的方便。 表驱动的词法分析程序相对直接编程方法来说,程序较复杂。由于在工作中需要查表确定分析动作,因此分析速度也慢一些。,4.6.2 借助工具Lex的词法分析程序构造,LEX(lexical Ananlyzer Generator)是一个词法分析程序的自动生成器。LEX 是1972年贝尔实验室首先在UNIX上实现的。FLEX(Fast lexical Ana

35、nlyzer Generator)是对LEX的扩充,它可在MS-DOS下运行。LEX能根据给定的正规式自动生成相应的词法分析程序。LEX的输入是用LEX语言写的源程序,生成一个用C语言描述的词法分析器,所以LEX本身就相当于LEX语言的编译程序。,4.6.2 借助工具Lex的词法分析程序构造,一. 使用Lex的一般步骤: 单词的结构用正规式描述正规式 NFA DFA min DFA 构造词法分析程序 二. 用LEX建立词法分析程序的过程,三、 lex源程序的格式lex源程序的一般格式是:说明部分%转换规则部分%辅助过程部分其中用花括号起来的各部分都不是必须有的。当没有“辅助过程部分”时,第二个

36、%也可以省去。第一个%是必须的,因为它标志着识别规则部分的开始,最短的合法的lex源程序是:%它的作用是将输入串照原样抄到输出文件中。,4.6.2 借助工具Lex的词法分析程序构造,转换规则部分是Lex源程序的核心。它是一张表,左边一列是正规式,右边一列是相应的动作。 下面是一条典型的识别规则:integer printf(“found keywcrd INT“);这条规则的意思是在输入串中寻找词形“integer”,每当与之匹配成功时,就打印出“foundkeyword INT”这句话。,4.6.2 借助工具Lex的词法分析程序构造,4.6.2 借助工具Lex的词法分析程序构造,四、LEX使

37、用步骤: 1、编写LEX源程序,如“Cffx.l”,将“Cffx.l”与FLEX.EXE保存在同一文件夹下。 2、进入DOS环境FLEX.EXE所在文件夹,运行FLEX.EXE程序。 FLEX cffx.l 3、运行FLEX后,产生“LEXYY.C”程序 4、用VC打开“LEXYY.C”程序,编译后产生“LEXYY.EXE”程序。 5、编写TEST语言源程序,保存为AAA.TEST,并与“LEXYY.EXE”保存在同一文件夹下。 6、进入DOS环境“LEXYY.EXE”所在文件夹,运行“LEXYY.EXE”程序。 LEXYY.EXE AAA.TEST BBB.TXT 7、打开“BBB.TXT”,看词法分析的结果。,本章小结,词法分析程序是编译第一阶段的工作,它读入字符流的源程序,按照词法规则识别单词,交由语法分析程序接下去进一步处理。本章讲述了词法分析程序设计原则,并介绍了分别作为正规集描述和识别机制的正规式和有穷动自动机。在此基础上给出了词法分析程序自动构造工具如LEX的原理。,作业,作业一: 课后习题 1,2,3,4 作业二: 上网查找整理Lex用法资料,下载信箱中的关于Test语言的资料并学习,准备实验一。邮箱: 密码:computer2008,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报