Formal Languages and Compilers (形式语言和编译器) 的 自学笔记兼学习教程。
笔记作者介绍:大爽歌, b站小UP主 ,编程1对1辅导老师。

1 Finite Automata and Regular Languages

有限自动机与正则语言

In theoretical computer science and formal language theory, a regular language (also called a rational language) is a formal language that can be defined by a regular expression, in the strict sense in theoretical computer science (as opposed to many modern regular expressions engines, which are augmented with features that allow recognition of non-regular languages).
在理论计算机科学和形式语言理论中,正则语言(也称为理性语言)是一种可以由正则表达式定义的形式语言,在理论计算机科学的严格意义上(与许多现代正则表达式引擎相反, 增加了允许识别非常规语言的功能)。

Alternatively, a regular language can be defined as a language recognized by a finite automaton. The equivalence of regular expressions and finite automata is known as Kleene’s theorem (after American mathematician Stephen Cole Kleene). In the Chomsky hierarchy, regular languages are the languages generated by Type-3 grammars.

或者,可以将常规语言定义为有限自动机识别的语言。 正则表达式和有限自动机的等价性被称为 Kleene 定理(以美国数学家 Stephen Cole Kleene 命名)。 在乔姆斯基层次结构中,常规语言是由 Type-3 语法生成的语言。

1 Languages

The Formal Language Theory considers a Language as a mathematical object.
形式语言理论将语言视为数学对象。

Alphabet, string and language
字母、字符串和语言

符号与概念认识
Formal Notions:

  • symbol: 单个的基本符号

  • alphabet ∑\sum∑: a non-empty finite set of symbols
    非空有限符号集, 一般用∑\sum∑表示

  • string over ∑\sum∑: a finite sequence of symbols
    字母表∑\sum∑中符号的有限序列(序列:有序的排列)

  • ∣w∣|w|∣w∣: 获取字符串w的长度(字符串w中符号的个数)

  • ε\varepsilonε: empty string
    空字符串

  • ∑∗\sum^*∑∗: the set of all strings over ∑\sum∑.
    字母表∑\sum∑所有字符串的集合
    Linguistic Universe(语言宇宙)

  • language: a set of strings
    字符串的一个集合(一组字符串)

关系:
L⊆∑∗L \subseteq \sum^*L⊆∑∗
L是∑∗\sum^*∑∗的一个子集

L may be infinite!
L可能是无限的

Example(举例)

  • symbols: 0,1
  • ∑\sum∑: {0, 1}
  • string: 10, 01, 101, 010
  • Language: {0, 011, 0111, 01111, …}

2 Deterministic Finite Automaton

Machine to recognize whether a given string is in a given set.

DFA: Deterministic Finite Automaton
确定性有限自动机
基本介绍

In DFA, for each input symbol, one can determine the state to which the machine will move.
在 DFA 中,对于每个输入符号,可以确定机器将移动到的状态。
Hence, it is called Deterministic Automaton.
因此,它被称为确定性自动机。
As it has a finite number of states, the machine is called Deterministic Finite Machine or Deterministic Finite Automaton.
由于它具有有限数量的状态,因此该机器称为确定性有限机器或确定性有限自动机。

Formal Definition of a DFA
DFA 的正式定义

A deterministic finite automaton MMM is a 5-tuple (QQQ, ∑\sum∑, δ\deltaδ, q0q_0q0​, FFF) where

  • QQQ: a finite set of states
    一个有限集合,存放的是状态state
  • ∑\sum∑: a finite set of input symbols
    一个有限集合, 存放的是输入符号(字母表)
  • δ\deltaδ: a transition function where $\delta : Q \times \sum \rightarrow Q $
    转换函数
  • q0q_0q0​: an initial or start state $ q_0 \in Q $
    初始或开始状态
  • FFF: a set of accept states F⊆QF\subseteq QF⊆Q
    一组接受状态(最终状态,结束状态, final state)

Graphical Representation of a DFA
A DFA is represented by digraphs called state diagram.
DFA 可由有向图表示,这样的图称为状态图。

  • The vertices represent the states.
    顶点代表状态。
  • The arcs labeled with an input alphabet show the transitions.
    标有输入字母的弧线显示了转换。
  • The initial state is denoted by an empty single incoming arc.
    初始状态由一个空的单个传入弧表示。
  • The final state is indicated by double circles.
    最终状态由双圈表示。

如果处理一串输入后,MMM的状态在FFF中, 则该输入为可接受的(accepted)。
否则为拒绝的(rejected)

Example
举例

The following example is of a DFA M, with a binary alphabet, which requires that the input contains an even number of 0s.

以下示例是具有二进制字母表的 DFA MMM,它要求输入包含偶数个0。

M=(Q,∑,δ,q0,F)M = (Q, \sum, \delta, q_0, F)M=(Q,∑,δ,q0​,F)

  • Q={q0,q1}Q = \{q_0, q_1\}Q={q0​,q1​}
  • ∑={0,1}\sum = \{0, 1\}∑={0,1}
  • $ F = {q_0} $

转换函数δ\deltaδ如下
δ(q0,0)=q1\delta(q_0, 0) = q_1δ(q0​,0)=q1​
δ(q0,1)=q0\delta(q_0, 1) = q_0δ(q0​,1)=q0​
δ(q1,0)=q0\delta(q_1, 0) = q_0δ(q1​,0)=q0​
δ(q1,0)=q1\delta(q_1, 0) = q_1δ(q1​,0)=q1​

δ\deltaδ用表格展示如下(state transition table):

0 1
q0q_0q0​ q1q_1q1​ q0q_0q0​
q1q_1q1​ q0q_0q0​ q1q_1q1​

MMM的状态图(state diagram)如下

分析: MMM读取到0会改变状态,读取到1状态不变。
MMM只在q0q_0q0​状态结束。

所以MMM只接受偶数个0,任意个数个1。
其对应的正则表达式为(1*)(0(1*)0(1*))*
其中*代表该字符重复任意次数(0次,1次到多次)

extended transition function
扩展转换函数

δ^:Q×∑∗→Q\hat \delta: Q \times \sum ^* \rightarrow Qδ^:Q×∑∗→Q

  • δ^(q,ε)=q\hat \delta(q, \varepsilon)=qδ^(q,ε)=q
  • δ^(q,ax)=δ^(δ(q,a),x),a∈∑,x∈∑∗\hat \delta(q, ax)=\hat \delta(\delta(q, a), x), a \in \sum, x \in \sum ^*δ^(q,ax)=δ^(δ(q,a),x),a∈∑,x∈∑∗

regular
正则的,正规的

  • www is accepted by MMM if δ^(q0,w)∈F\hat \delta(q_0, w) \in Fδ^(q0​,w)∈F.
  • www is rejected by MMM if δ^(q0,w)∉F\hat \delta(q_0, w) \notin Fδ^(q0​,w)∈/​F.
  • L(M)={w∈∑∗∣δ^(q0,w)∈F}L(M) = \{ w \in \sum^* | \hat \delta (q_0, w) \in F\}L(M)={w∈∑∗∣δ^(q0​,w)∈F} is the language acepted by MMM.
  • $ A \subseteq \sum^*$ is regular if A=L(M)A=L(M)A=L(M) for some DFA MMM

简单来讲,如果一个语言A(A是∑∗\sum^*∑∗的子集),
能找到对应的DFA, 则该语言是regular.

补充

  • N\Bbb NN: the set of natural numbers,
    自然数集, 包含0和正整数
  • Aˉ\bar{A}Aˉ: 集合AAA的补集
  • ∅\emptyset∅: 空集,不含任何元素,和{ε}\{\varepsilon\}{ε}不同

3 Non-Deterministic Finite Automata

In automata theory, a finite-state machine is called a deterministic finite automaton (DFA), if

  • each of its transitions is uniquely determined by its source state and input symbol, and
  • reading an input symbol is required for each state transition.

在自动机理论中,有限状态机称为确定性有限自动机 (DFA),如果

-它的每个转换都由其源状态和输入符号唯一确定,并且
-每个状态转换都需要读取一个输入符号。

A nondeterministic finite automaton (NFA), or nondeterministic finite-state machine, does not need to obey these restrictions. In particular, every DFA is also an NFA. Sometimes the term NFA is used in a narrower sense, referring to an NFA that is not a DFA, but not in this article.

非确定性有限自动机 (NFA) 或非确定性有限状态机不需要遵守这些限制。 广义上,每个 DFA也是一个NFA。NFA在狭义上使用,指的是不是DFA的NFA。(后面的应该主要讨论狭义上的NFA)

简单来讲,DFA就是一个状态(state),对于每一个输入字符($ sybmol \in Q $),其结果都是唯一确定的。
如果结果不唯一有多个(或者没有),那么就是NFA

NFA也可称为NDFA, NFA可以转换为等效的DFA

Formal Definition of an NFA
A deterministic finite automaton MMM is a 5-tuple (QQQ, ∑\sum∑, δ\deltaδ, q0q_0q0​, FFF) where

  • Q,∑,q0,FQ, \sum, q_0, FQ,∑,q0​,F 和DFA中的意义相同
  • transition function δ\deltaδ: Q×∑→P(Q)Q \times \sum \rightarrow \mathcal P(Q)Q×∑→P(Q).

P(Q)\mathcal P(Q)P(Q) denotes the power set of QQQ, that is, the set of subsets of QQQ.
P(Q)=S∣S⊆Q\mathcal P(Q)={S | S \subseteq Q}P(Q)=S∣S⊆Q

举一个例子,来展示两者的不同。

  • DFA: δ(q0,a)=q1\delta(q_0, a) = q_1δ(q0​,a)=q1​, 其结果是单个状态
  • NFA: δ(q0,a)={q0,q1}\delta(q_0, a) = \{q_0, q_1\}δ(q0​,a)={q0​,q1​}, 其结果是状态集合(可以是多个,甚至可以是空集)

NFA MMM 的操作基本和DFA差不多。
不同的地方如下

  • If MMM is in state qqq and the next symbol is aaa then MMM moves to any state in δ(q,a)\delta(q, a)δ(q,a).
    如果MMM处于状态qqq并且下一个符号是aaa,则MMM可以移动到δ(q,a)\delta(q, a)δ(q,a)中的任何状态。
  • If δ(q,a)\delta(q, a)δ(q,a) is empty then MMM gets stuck.
    如果δ(q,a)\delta(q, a)δ(q,a)为空,则MMM会卡住。
  • M accepts w if at least one transition sequence ends in a state p ∈ F after reading all of w.
    在读取所有www的符号后, 如果有至少一个转换序列以accpet state 结束,
    即有至少一个转换序列最后状态满足p∈Fp \in Fp∈F,则MMM可接受www。

举例理解

下面是NFA M2M2M2 的图示(state diagram)

则其transition relation如下
δ(q0,0)={q0}\delta(q_0, 0) = \{q_0\}δ(q0​,0)={q0​}
δ(q0,1)={q0,q1}\delta(q_0, 1) = \{q_0, q_1\}δ(q0​,1)={q0​,q1​}
δ(q1,0)={q2}\delta(q_1, 0) = \{q_2\}δ(q1​,0)={q2​}
δ(q1,1)={q2}\delta(q_1, 1) = \{q_2\}δ(q1​,1)={q2​}

用表格展示如下(state transition table):

0 1
q0q_0q0​ {q0}\{q_0\}{q0​} {q0,q1}\{q_0, q_1\}{q0​,q1​}
q1q_1q1​ {q2}\{q_2\}{q2​} {q2}\{q_2\}{q2​}

Possible transition sequences for input 110:
输入110时,可能的转换情况如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r3nSf1k6-1657611642079)(imgs/103.png)]

其中存在一个结束状态属于FFF
所以110能被NFA接受

NFA -> DFA
Using the subset construction algorithm, each NFA can be translated to an equivalent DFA.
使用子集构造算法,每个 NFA 都可以转换为等效的 DFA。

示例如下
把上面的NFA M2M2M2 转换成 DFA
用q01q_01q0​1表示{q0,q1}\{q_0, q_1\}{q0​,q1​}

则转换后的DFA表格展示如下(state transition table):

0 1
q0q_0q0​ $q_0$ q01q_{01}q01​
q01q_{01}q01​ q02q_{02}q02​ q012q_{012}q012​
q02q_{02}q02​ q0q_0q0​ q01q_{01}q01​
q012q_{012}q012​ q02q_{02}q02​ q012q_{012}q012​

其DFA图示(state diagram)如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lqsw3ygP-1657611642080)(imgs/104.png)]

ε\varepsilonε-Transitions
Formal Definition of an NFA
A deterministic finite automaton MMM is a 5-tuple (QQQ, ∑\sum∑, δ\deltaδ, q0q_0q0​, FFF) where

  • Q,∑,q0,FQ, \sum, q_0, FQ,∑,q0​,F 和DFA中的意义相同
  • ε\varepsilonε is a speical symbol with $\varepsilon \notin \sum $
  • δ:Q×(∑∪{ε})→P(Q)\delta: Q \times (\sum \cup \{\varepsilon\} ) \rightarrow \mathcal P(Q)δ:Q×(∑∪{ε})→P(Q)
  • δ\deltaδ may have ε\varepsilonε-transitions and yields a set of successor states.

QUESTION

  1. DFA是否每个状态都要能处理所有输入符号。
    对每个输入符号,是否都要有对应箭头,没有会怎样。
    回答:一定要有状态
    NFA的ε\varepsilonε可以通过走到一个死循环节点替换。

未完待续。。。

Formal Languages and Compilers 笔记教程 第一章 有限自动机与正则语言 (Finite Automata and Regular Languages)相关推荐

  1. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境 文章目录 黑帽python第二版(Black Hat Python 2nd ...

  2. javascript进阶教程第一章案例实战

    javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了"删除& ...

  3. 北大青鸟c语言课后答案,北大青鸟C语言教程--第一章 C语言基础.ppt

    <北大青鸟C语言教程--第一章 C语言基础.ppt>由会员分享,可在线阅读,更多相关<北大青鸟C语言教程--第一章 C语言基础.ppt(20页珍藏版)>请在人人文库网上搜索. ...

  4. 《Oracle DBA工作笔记》第一章

    <Oracle DBA工作笔记>第一章 BLOG文档结构图I 本文简介 建荣的新书<Oracle DBA工作笔记>拿到手了,下午离下班还有1个小时的时候有空了,就阅读了下新书的 ...

  5. 数字图像识别笔记(第一章绪论)

    title: 数字图像识别笔记(第一章绪论) categories: 数字图像识别 tags: 数字图像识别 date: 2020/9/29 23:59 mathjax: true toc: true ...

  6. 学习笔记-应用光学 第一章 几何光学的基本定律

    学习笔记-应用光学 第一章 几何光学的基本定律 1-1 发光点.波面.光线和光束 发光点:本身发光或被照明后发光的几何点 波面:发光点在某一时刻发出的光形成波面 (在各向同性均匀介质中波面是球形) 光 ...

  7. 乐行学院Redis5学习教程 第一章redis5的安装

    乐行学院Redis5学习教程 第一章redis5的安装 1.安装虚拟机 2.centeros下载 3.vmware安装centeros 4.vmware安装centeros设置IP 5.安装redis ...

  8. oracle小麦苗博客,《Oracle DBA工作笔记》第一章

    <Oracle DBA工作笔记>第一章 1BLOG文档结构图 2本文简介 建荣的新书<Oracle DBA工作笔记>拿到手了,下午离下班还有1个小时的时候有空了,就阅读了下新书 ...

  9. laravel教程 第一章安装laravel

    #laravel教程# ##第一章 安装laravel## ###前言 ### 有很多人,都在纠结于自己学什么框架,用什么框架.在这里我想告诉你,框架都是死的,但是人是活的,只要你明白的框架的基本原理 ...

最新文章

  1. type=file的未选择任何文件修改_PDF文件怎样输入到CAD图纸中?懂得这个功能可以快速实现...
  2. Java 理论与实践: 非阻塞算法简介
  3. 使用ETag识别ajax,如何使用jQuery AJAX请求访问ETag头?
  4. Nginx学习之十二-负载均衡-加权轮询策略剖析
  5. Qt Dialog捕捉鼠标移动事件
  6. HDU1086You can Solve a Geometry Problem too(判断线段相交)
  7. php 运行thinkphp,thinkPHP cli命令行运行PHP代码
  8. 火灾自动报警系统 切换模块
  9. php 调用 百度句法分析,【原创源码】百度新版翻译API调用使用范例
  10. html5 css3 入门教程
  11. 估值20亿美元 快狗打车将成“货运第一股”?
  12. 熊猫人表情包python 代码_用Python爬取斗图网表情包
  13. 如何在支付宝开直播,这篇入驻教程不要错过,看完你就会了
  14. 机器学习的几种分类损失函数
  15. 无法将“obj\Debug\net6.0\MvcMovie.dll”复制到“bin\Debug\net6.0\MvcMovie.dll
  16. hive中关键字作为列名的方法
  17. 【读书】张萌作品:《人生效率手册:如何卓有成效地过好每一天》
  18. 电子政务信息系统整合共享管理研究
  19. 慢性子的网易,走不快的B端?
  20. 为带你搞懂RPC,手写了RPC框架

热门文章

  1. 前端找工作真的那么难吗?
  2. 跨境电商多语言购物返利商城支持多币种付款
  3. 钩子函数介绍以及与回调函数的区别
  4. Python -- 获取今天任意时刻的时间戳
  5. ebs r12 linux,开始学习oracle ebs r12--第一次失败的安装
  6. 地铁售票软件NABCD
  7. Hexo+gitee:30分钟搭建一个自己的个人博客网站 欢迎友链呀<(▰˘◡˘▰)
  8. tensorflow 物体检测(检测限速标志)
  9. 数学工具MapleSim2022的安装配置使用
  10. 计算机网络里面一些细碎的知识点