哈工大 编译原理 网课笔记 —— 3.词法分析

正则表达式

  • 正则表达式简单介绍

    • 在这里插入图片描述
  • 正则表达式定义

    • 在这里插入图片描述

      • R E RE RE 是 正则表达式 缩写
      • 在这里插入图片描述
    • 例: C语言无符号整数的RE

      • 在这里插入图片描述
  • RE 的代数定律

    • 在这里插入图片描述
  • 正则语言

    • 可以用RE定义的语言叫做正则语言(regular language)或正则集合(regular set)
  • 正则文法与正则表达式等价

    • 对任何正则文法 G G G,存在定义同一语言的正则表达式$ r $
    • 对任何正则表达式 r r r,存在生成同一语言的正则文法 G G G

正则定义

为了方便起见,给某些正则表达式命名,然后像使用字母表中的符号一样使用这些名字来构建正则表达式

  • 在这里插入图片描述

  • 例1

    • C语言中标识符的正则定义

      • digit(数字) → 0|1|2|…|9

      • letter_ → A|B|…|Z|a|b|…|z|_

      • id → letter_(letter_|digit)*

        id 中 体现是的字母打头的字符串,真实标识符的构造方法

  • 例2

    • 在这里插入图片描述

有 穷 自 动 机 (Finite Automata, FA )

词法分析的重要基础

  • 有穷自动机的典型例子——elevator
    • 电梯控制装置
      • 输入:顾客的乘梯需求(所要到达的层号)
      • 状态:电梯所处的层数+运动方向
      • 电梯控制装置并不需要记住先前全部的服务要求,只需要知道电梯当前所处的状态以及还没有满足的所有服务请求
  • FA模型
    • 在这里插入图片描述

      • 输入带(input tape):用来存放输入符号串
      • 读头(head ):从左向右逐个读取输入符号(方向确定),不能修改(只读)、不能往返移动
      • 有穷控制器( finite control ):具有有穷个状态数,根据当前的
        状态和当前输入符号控制转入下一状态
    • FA的表示

      • 在这里插入图片描述
    • FA定义(接收)的语言

      • 在这里插入图片描述
    • 最长子串匹配原则

      • 在这里插入图片描述

      • 比如 ++ ,<=,中一起出现时,不只是选择 +,<

有穷自动机的分类

  • FA的分类

    • 确定的FA——DFA
    • 非确定的FA——NFA
  • 确定的有穷自动机DFA

    • 在这里插入图片描述
  • 一个DFA

    • 转换图和转换表两者的功能是等价的
    • 在这里插入图片描述
  • 非确定的有穷自动机(NFA)

    • 在这里插入图片描述

    • 在这里插入图片描述

    • NFA的最终结果不唯一,这个也是 N N N的来源

  • DFA 和 NFA 的等价性

    • 对任何非确定的有穷自动机N ,存在定义同一语言的确定的有穷自动机D
    • 对任何确定的有穷自动机D ,存在定义同一语言的非确定的有穷自动机N
    • DFA和NFA可以识别相同的语言
      • 在这里插入图片描述

        • 通过分析可知:
          • NFA表示的为以 a a a a b ab ab a b b abb abb 三种情况
          • 仔细分析DFA也可以得到一样的结论,需要注意的是,0 状态不能作为结尾
          • 以上的FA表达可以使用左边相同的正则表达式表达,同时正则表达式又与前文说的正则文法等价,所以
            • 正则文法 ⇔ 正则表达式 ⇔ FA
          • NFA较为直观,DFA在计算机实现上更为容易,两者可以相互转换
  • 带有“ε-边”的NFA

    • 在这里插入图片描述

    • 带有和不带有“ε-边”的NFA 的等价性

      • 在这里插入图片描述

        • 这里图下方的 A A A状态可以作为状态,两个小图的符号不一样
  • DFA的算法实现

    • 在这里插入图片描述

从正则表达式到有穷自动机

正则表达式采用的是一种符号序列的模式,可以很直观的来描述单词的构成。但是在构造分析器的时候,真正实现或模拟的是DFA。以此这个也是这章要介绍的

  • 从正则表达式到有穷自动机
    • REFA 之间进行转换会比较困难,中间引入 N F A NFA NFA 出处理会比较容易

      • 在这里插入图片描述
    • 根据 RE 构造 NFA

      • 在这里插入图片描述

      • 在这里插入图片描述

      • 在这里插入图片描述

从NFA到DFA的转换

  • 从NFA到DFA的转换
    • 在这里插入图片描述

      • NFA转换到DFA
    • 例2:从带有ε-边的NFA到DFA的转换

      • 在这里插入图片描述

        • 通过判断 正则表达式来判断 NFA DFA是否等价
  • 子集构造法
    • 在这里插入图片描述

      • 结合上面内容可知,子集构造法容易理解
      • 计算 ε-closure (T )
        • 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值