• 词法分析(二):词法规则的形式化——正规式与正规集


    词法分析概述


    语法描述的基本概念

    复习一下语法描述的基本概念:

    字母表:一个有穷字符集,记为Σ
    字母表中的每个元素称为字符
    Σ上的字符串):由Σ中的字符构成的一个有穷序列
    不包含任何字符的序列称为空字,记为ε
    Σ*表示Σ上所有字的全体(Σ上所有字符所能产生的字),包含空字ε

    例:设Σ={ a,b },则
    Σ* = { ε,a,b,aa,ab,bb,ba,aaa,…}

    若U、V为Σ*的两个子集,则U和V的连接)定义为
    UV = { αβ | α∈U & β∈V },顺序不可颠倒

    例:设U = { a,aa }、V = { b,bb }
    则UV = { ab,abb,aab,aabb }

    V自身的n次积记为Vn
    V0 = { ε }
    V*是V的闭包:V*=V0∪V1∪V2∪V3∪…
    V+是V的正规闭包:V+ = VV*

    例:设U={ a,aa }
    U* = { ε,a,aa,aaa,……}
    U+ = { a,aa,aaa,aaaa,……}

    可以看出正规闭包是不包含 ε 的闭包


    正规式与正规集

    程序语言都有一定的词法规则,按照这些词法规则产生的单词符号都是一些特殊的字符串,
    因此,可以形式化地描述词法规则,即描述了词法规则对应的单词集合

    正规式即是词法规则一种形式化描述,对应的单词集合称为正规集

    正规式其实就是正则表达式

    一个字的集合是正规集当且仅当它能用正规式表示
    正规式⇔正规集
    在这里插入图片描述
    上面这张图就描述了右边单词表定义的语言的所有的字
    因为正规式可以识别语言的所有字,所以可以用正规式进行词法分析

    正规式与正规集的递归定义
    对于给定的字母表Σ

    • ε和∅都是Σ上的正规式,它们所表示的正规集是{ ε }和{ ∅ }
    • 任何a∈Σ,a是Σ上的正规式,它所表示的正规集是{ a }
    • 若e1和e2都是Σ上的正规式,它们所表示的正规集为L(e1)、L(e2),则有
      • (e1|e2)为正规式,表示的正规集为L(e1)∪L(e2)
      • (e1·e2)为正规式,表示的正规集为L(e1)L(e2)
      • (e1)* 为正规式,表示的正规集为(L(e1))*
        仅由有限次使用上述三个步骤定义的表达式才是Σ上的正规式
        仅由这些正规式表示的字集才是正规集

    根据定义
    ε是Σ上的一个字,且是正规集{ ε }的正规式,可识别字ε
    ∅是一个集合,也是正规式,表示是的正规集是{ ∅ }
    任何a∈Σ,a既是Σ中的字符,又是Σ上的字,还是Σ上的正规式,表示的正规集是{ a }

    正规式的等价

    若连个正规式表示的正规集相同,则称这两个正规式等价
    在这里插入图片描述
    以上证明表示正规式b(ab)*与(ba)*b等价

    正规式的性质
    交换律:e1|e2 = e2|e1
    结合律:e1|(e2|e3) = (e1|e2)|e3 e1(e2e3) = (e1e2)e3 | 及 · 运算均满足结合律
    分配律:e1(e2|e3) = e1e2|e1e3 (e2|e3)e1 = e2e1|e3e1 | 对 · 及 · 对 | 的运算均满足分配律
    eε = εe = e
    e1e2<>e2e1


    2019/7/20

  • 相关阅读:
    Cocos2dx-背景无限循环播放
    centos 7端口和防火墙
    图片裁剪
    spring-boot图片压缩
    vue cli简介
    spring-boot的配置(实时生效)
    spring-boot打成war包放入tomcat运行
    spring-boot上传图片并访问
    linux链接ssh
    mysql远程访问
  • 原文地址:https://www.cnblogs.com/kafm/p/12721805.html
Copyright © 2020-2023  润新知