词法分析
被考次数: 1次
被考频率: 低频率
答错率:    57%
知识难度:
考试要求: 掌握     
知识路径:  > 计算机系统基础知识  > 计算机软件基础知识  > 程序设计语言和语言处理程序知识  > 汇编、编译、解释系统的基本知识和基本工作原理  > 程序语言翻译基础  > 编译程序基本原理


本知识点历年真题试卷分布
>> 试题列表    
 

 
       语言中具有独立含义的最小语法单位是符号(单词),如标识符、无符号常数与界限符等。词法分析的任务是把构成源程序的字符串转换成单词符号序列。词法规则可用3型文法(正规文法)或正规表达式描述,它产生的集合是语言规定的基本字符集∑(字母表)上的字符串的一个子集,称为正规集。
       正规表达式和正规集
       对于字母表∑,其上的正规式及其表示的正规集可以递归定义如下:
       (1)ε是一个正规式,它表示集合Lε)={ε}。
       (2)若a是∑上的字符,则a是一个正规式,它所表示的正规集为{a}。
       (3)若正规式rs分别表示正规集Lr)和Ls),则:
       ①r\s是正规式,表示集合Lr)∪Ls)。
       ②r·s是正规式,表示集合LrLs)。
       ③r*是正规式,表示集合(Lr))*
       ④(r)是正规式,表示集合Lr)。
       仅由有限次地使用上述三个步骤定义的表达式才是∑上的正规式,其中运算符“|”“.”“*”分别称为“或”“连接”“闭包”。在正规式的书写中,连接运算符“.”可省略。运算符的优先级从高到低顺序排列为“*”“.”“|”。
       设∑={ab},下表列出了∑上的一些正规式和相应的正规集。
       
       正规式与正规集示例
       若两个正规式表示的正规集相同,则认为二者等价。两个等价的正规式UV记为U=V。例如,bab*=(ba*b,(ab*=(a*b**。设UVW均为正规式,正规式的代数性质如下表所示。
       
       正规式的代数性质
       有限自动机
       有限自动机是一种识别装置的抽象概念,它能准确地识别正规集。有限自动机分为确定的有限自动机和不确定的有限自动机两类。
       (1)确定的有限自动机(Deterministic Finite Automata,DFA)。一个确定的有限自动机是一个五元组(S,Σ,fs0Z),其中:
       .S是一个有限集,其每个元素称为一个状态。
       .Σ是一个有穷字母表,其每个元素称为一个输入字符。
       .fS×Σ→S上的单值部分映像。fAa)=Q表示当前状态为A、输入为a时,将转换到下一状态Q。称Q为A的一个后继状态。
       .s0Ss0称为开始状态,是唯一的。
       .Z是非空的终止状态集合,
       一个DFA可以用两种直观的方式表示:状态转换图和状态转换矩阵。状态转换图简称为转换图,是一个有向图。DFA中的每个状态对应转换图中的一个节点,DFA中的每个转换函数对应图中的一条有向弧,若转换函数为fAa)=Q,则该有向弧从节点A出发,进入节点Q,字符a是弧上的标记。
       (2)不确定的有限自动机(Nondeterministic Finite Automata,NFA)。一个不确定的有限自动机也是一个五元组,它与确定有限自动机的区别如下:
       ①fS×Σ→2S上的映像。对于S中的一个给定状态及输入符号,返回一个状态的集合。即当前状态的后继状态不一定是唯一的。
       ②有向弧上的标记可以是ε
       (3)NFA到DFA的转换。
       任何一个NFA都可以转换为DFA,下面先定义转换过程中需要的计算。
       定义1:状态集Iε_闭包。
       若I是NFAN的状态集合的一个子集,定义ε_CLOSURE(I)如下:
       .状态集Iε_CLOSURE(I)是一个状态集。
       .状态集I的所有状态属于ε_CLOSURE(I)。
       .若sI,那么从s出发经过任意条ε弧到达的状态s'都属于ε_CLOSURE(I)。
       状态集ε_CLOSURE(I)称为Iε_闭包。
       由以上的定义可知,Iε_闭包就是从状态集I的状态出发,经ε所能到达的状态的全体。
       定义2:状态集I的对字符a的状态转移。
       假定I是NFAN的状态集的一个子集,a是Σ中的一个字符,定义:
       Ia=ε_CLOSURE(J
       其中,J是所有那些可从I中的某一状态节点出发经过一条a弧而到达的状态节点的全体。
       用子集法将一个NFA转换为一个DFA。
       设NFAN=(S,Σ,fs0Z),与之等价的DFAM=(S',Σ,f',q0Z'),用子集法将非确定的有限自动机确定化的算法步骤如下:
       ①求出DFAM的初态q0,即令q0=ε_CLOSURE({s0}),此时S'仅含初态q0,并且没有标记。
       ②对于S'中尚未标记的状态qi={si1si2,…,sim},sijSj=1,…,m)进行以下处理:
       .标记qi,以说明该状态已经计算过。
       .对于每个a∈∑,令T=f({si1si2,…,sim},a),qj=ε_CLOSURE(T)。
       .若qj尚不在S'中,则将qj作为一个未加标记的新状态添加到S',并把状态转换函数f'(qia)=qj添加到DFAM中。
       ③重复进行步骤②,直到S'中不再出现未标记的状态时为止。
       ④令Z'={qqS'且qZ?}。
       
       识别ab*a的DFA示意图
       对上图所示的自动机进行化简所得的DFA如下图所示。
       
       识别ab*a的最小化DFA示意图
       正规式与有限自动机之间的转换
       正规式与有限自动机间可以相互转换。
       (1)有限自动机转换为正规式。
       对于Σ上的NFAM,可以构造一个Σ上的正规式R,使得LR)=LM)。
       拓广状态转换图的概念,令每条弧可用一个正规式作标记。为Σ上的NFAM构造相应的正规式R,分为如下两步:
       第一步:在M的状态转换图中加两个节点,一个x节点,一个y节点。从x节点到NFAM的初始状态节点引一条弧并用ε标记,从NFAM的所有终态节点到y节点引一条弧并用ε标记。形成一个与M等价的M',M'只有一个初态x和一个终态y
       第二步:按下面的方法逐步消去M'中除xy的所有节点。在消除节点的过程中,用正规式来标记弧,最后节点xy之间弧上的标记就是所求的正规式。消除节点的规则如下图所示。
       
       有限自动机到正规式的转换规则示意图
       (2)正规式转换为有限自动机。
       同样地,对于Σ上的每个正规式R,可以构造一个Σ上的NFAM,使得LM)=LR)。
       ①对于正规式R,可用下图所示的拓广状态图表示。
       
       拓广状态图
       ②通过对正规式R进行分裂并加入新的节点,逐步把图转变成每条弧上的标记是∑上的一个字符或ε,转换规则如下图所示。
       
       正规式到有限自动机的转换规则示意图
       最后所得的图即为一个NFAMx为初态节点,y为终态节点。显然,LM)=LR)。
       词法分析器的构造
       构造词法分析器的一般步骤为:用正规式描述语言中的单词构成规则;为每个正规式构造一个NFA,它识别正规式所表示的正规集;将构造出的NFA转换成等价的DFA;对DFA进行最小化处理,使其最简;最后用手工编码或表驱动的方式从最简DFA构造词法分析器。
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有