zoukankan      html  css  js  c++  java
  • 编译原理基础词法分析

    一、概述

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

    二、正则表达式

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

      (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

      

  • 相关阅读:
    java 后台校验格式
    spring AOP 实现事务和主从读写分离
    【Day5】项目实战.CSDN热门文章爬取
    【Day5】3.反爬策略之模拟登录
    【Day5】2.反爬策略之代理IP
    【Day5】1.Request对象之Header伪装策略
    【Day4】5.Request对象之Http Post请求案例分析
    【Day4】4.Request对象之Get请求与URL编码
    【Day4】3.urllib模块使用案例
    【Day4】2.详解Http请求协议
  • 原文地址:https://www.cnblogs.com/RanWhoo/p/15614471.html
Copyright © 2011-2022 走看看