编译原理基础----词法分析

一、概述

  词法分析是编译的第一个阶段。词法分析器的作用是读入源程序的输入字符,将他们组成词素,生成并输出一个词法单元序列,这个词法单元序列被输入到语法分析器进行语法分析。另外,由于语法分析器在编译器中负责读取源程序,因此,除了识别词素,它还会完成一些其他任务,比如,过滤掉源程序中的一些注释和空白,将编译器生成错误消息与源程序的位置关联起来等。

 

二、正则表达式

 

 

  正规式也成为正则表达,也是表示正规集的工具。也是我们用于描述单词符号的方便工具,下面是正规式和他所表示的正规集的递归定义。设字母表为£,辅助字母表为£'={Φ,ε,.,*,(,)}.

  (1)ε和Φ都是£上的正规式,他们所表示的正规集分别为{ε}和Φ;

 (2)任何a€£上的一个正规式,它表示的正规集为{a};

 (3)假定e1和e2是£上的一个正规式,它表示的正规集分别为L(e1)和L(e2),那么(e1),e1|e2,e1.e2和e*也都称为正规式,它所表示的正规集分别为L(e1),L(e1)υL(e2),L(e1)L(e2)和(L(e1))*

 (4)仅有有限次使用上述三步骤而定义的表达式才是£上的正规式,仅有这些正规式所表示的字集才是£上的正规式。

  其中的“|”读为“或”(也有使用“+”代替“|”的),读为“连接”,“*”读为闭包(即任意有限次的自重复连接)。在不至混淆,括号可省去,但规定算符的优先顺序为“*”,再最后“|”。连接符"."一般可省略不写。“*”、“.”和“|”都是左结合的。

三、有穷自动机

  一个确定的有穷自动机M是一个五元组:M=(K,£,f,S,Z),其中

  1.K是一个又穷集,它的每一个元素称为一个状态;

  2.£是一个有穷字母表,它的每一个元素称为一个输入符号,所以也称£为输入符号表;

  3.f是转换函数,是KX£->K上的印像,即,如f(ki,a)=kj(ki€K,kj€K)就意味着,当前状态为ki,输入字符为a时,将转换到下一状态空间,我们把kj作为称作一个后继状态;

  4.S€K是唯一一个初态

  5.Z包含于K,是一个终态集,终态也可成为接受状态或结束状态。

  不确定的有穷自动机

  

  一个不确定的有穷自动机M是一个五元组:M=(K,£,f,S,Z),其中

  1.K是一个有穷集,它的每一个元素称为一个状态;

  2.£是一个有穷字母表,它的每一个元素称为一个输入符号;

  3.f是一个K*£*到K的子集印像,;即:K*£*--->2k,其中2k表示K的幂集

  4.S€K是非空初态集

  5.Z包含于K,是一个终态集。

  确定的有穷自动机和不确定的有穷自动机的区别(参考链接):https://zhidao.baidu.com/question/129432957.html

四、NFA转化为等价的DFA

  参考链接:https://blog.csdn.net/k_lawliet/article/details/79398608

  

posted @ 2021-11-28 10:38  吴然_O_o_o  阅读(619)  评论(0编辑  收藏  举报