编译原理

第一章 文法

形式语言概念

  • 字母表(Alphabet)

    字母表是形式符号的集合,常用Σ来表示

    举例:英文字母表{a,b,c….,z,A,B,C,…,Z}、汉字表{编,译,原,理}

  • 字符串(String)

    由字母表Σ中的字符构成的有限序列。空串用ε来表示。

    字符串STR的长度可以表示为|STR|,是包含在STR中字符的个数

  • 字符串的连接

    设x,y为字符串 x=abcd,y=uio。则可以推导出 xy=abcduio

    运算性质: (xy)z=x(yz)、x=xε=εx、|xy|=|x|+|y|

  • 字母表上的运算

    Σ为字母表,则Σ的0次={ε}

    *闭包 Σ* = Σº∪Σ¹∪Σ²∪Σ³∪………∪Σⁿ

    +闭包 Σ+= Σ¹∪Σ²∪Σ³∪………∪Σⁿ

  • 语言

    设Σ为字母表,则任何集合L包含于Σ*是字母表Σ上的一个语言

上下文无关文法及其描述

例子:以下都用这个例子

1
2
3
4
5
6
E→EOE
E→(E)
E→v
E→d
O→+
O→*

🌈上下文无关文法的四个基本要素

  1. 终结符( terminals )的集合有限符号集,相当于字母表。

  2. 非终结符( nonterminals )的集合,有限变量符号的集合。非终结符与终结符最大的区别就是非终结符可以再分,但是终结符不可以在分

  3. 开始符号( start symbol ) 一个特殊的非终结符。

  4. 产生式( productions )的集合 形如: → →

image.png

🌈上下文无关文法的形式定义:表示为CFG image.png

V N:非终结符的集合

V T:终结符的集合

P:产生式的集合

S:开始符号

以上例子的CFG表达式:image.png不仅如此还可以缩写一下产生式image.png

🌈归约与推导

  • 用于推理字符串是否属于文法所定义的语言一种是自下而上的方法,称为递归推理(recursive inference),递归推理的过程习称为归约;另一种是自上而下的方法,称为推导(derivation).
    • 归约过程 将产生式的右部(body)替换为产生式的左部( head ).
    • 推导过程 将产生式的左部( head )替换为产生式的右部( body ).

递归推理出字符串 v *(v+d) 的一个推导过程为

image.png

递归推理出字符串 v *(v+d) 的一个归约过程为

image.png

🌈最左推导

若推导过程的每一步总是替换出现在最左边的非终结符,则这样的推导称为最左推导. 为方便,最左推导关系用 image.png表示,其自反传递闭包用image.png表示.如对于文法例子,以下是 v *(v+d)的最左推导

Screenshot_2023-02-22-19-11-52-498_com.orion.note.png

🌈最右推导

若推导过程的每一步总是替换出现在最右边的非终结符,则这样的推导称为最右推导. 为方便,最右推导关系用 image.png表示,其自反传递闭包用image.png表示.如对于文法例子,以下是 v *(v+d)的最右推导

Screenshot_2023-02-22-19-12-35-712_com.orion.note.png

🌈句型

image.png

🌈语法分析树

image.png

  • 对于 CFG G = (V N , V T , P, S ),语法分析树是满足下列条件的树:
    (1) 每个内部结点由一个非终结符标记.
    (2) 每个叶结点或由一个非终结符,或由一个终结符,或由ε来标记. 但标记为ε时,它必是其父结点唯一的孩子.
    (3) 如果一个内部结点标记为 A,而其孩子从左至右分别标记为X 1 ,X 2 , …,X k ,则 A → → X 1 X 2 …X k 是 P 中的一个产生式. 注意:只有 k=1 时上述 X i 才有可能为 ε,此时结点 A 只有唯一的孩子,且 A → ε 是P 中的一个产生式.

  • 语法分析树的果实

    设 CFG G = (V N , V T , P, S ). 将语法分析树的每个叶结点按照从左至右的次序连接起来,得到一个 (V N∪V T )* 中的字符串,称为该语法树的果实.G 的每个句型都是某个根结点为 S 的分析树的果实;这些分析树中,有些树的果实为句子,所有这些分析树的果实构成了 G 的语言.

🌈归约、推导与分析树之间关系

设 CFG G = (V N , V T , P, S ). 以下命题是相互等价的:

(1) 字符串 w∈ V T * 可以归约(递归推理)到非终结符A;
(2) Aimage.pngw;
(3) Aimage.pngw;
(4) Aimage.pngw;
(5) 存在一棵根结点为 A 的分析树,其果实为 w.

第二章 有限自动机

有限自动机的五大要素

1、有限状态集 2、有限输入符号集 3、转移函数 4、一个开始状态 5、一个终态集合

image.png

  • 确定有限自动机DFA的定义: A = ( K,Σ ,δ ,q0 ,Z)

    K:有限状态集

    Σ:有限输入符号集

    δ:转移函数 K x Σ → K

    q0:一个开始状态 ∈K

    Z:一个终态集合 包含于K

    如上图所示的转移图 可以用5大元素来表示

    K = {q 0 , q 1 , q 2 , q 3 }
    Σ= {0, 1}
    δ (q 0 ,0) = q 2 ,δ (q 0 ,1) = q 1
    δ (q 1 ,0) = q 3 ,δ (q 1 ,1) = q 0
    δ (q 2 ,0) = q 0 ,δ (q 2 ,1) = q 3
    δ (q 3 ,0) = q 1 ,δ (q 3 ,1) = q 2
    q 0
    Z = {q 0 , q 3 }

    同时还可以用表格的形式来表示DFA图

    image.png

    DFA接收输入符号的规则是:如果一个符号串能使DFA从开始状态转变为终态集合中的某一个,则该符号合法。

    🌈扩展转移函数

    设一个 DFA A = (K, Σ, δ , q 0 , Z ) δ : K × Σ → K
    − 扩充定义δ’ : K × Σ* → K,对任何q ∈ K , 定义:

    1. δ’ (q, ε ) = q
    2. 若w = xa, 其中 x ∈Σ*, a ∈Σ, 则δ’ ( q, w) = δ (δ’ ( q, x), a)

​ eg:

​ δ’ (q 0 , ε ) = q 0
​ δ’ (q 0 , 0)= δ (q 0 , 0)= q 2
​ δ’ (q 0 , 00)= δ (q 2 , 0)= q 0
​ δ’ (q 0 , 001)= δ (q 0 , 1)= q 1
​ δ’ (q 0 , 0010)= δ (q 1 , 0)= q 3

​ 🌈DFA的语言

​ 设一个 DFA A = (K, Σ, δ , q 0 , Z ) ,定义A的语言:满足L(A) ={w |δ’ ( q 0 , w) ∈Z } 就可以证明,如果满足L=L(A),则L是一个正规语言

  • 非确定有限自动机NFA 的定义: A= (K,Σ ,δ ,S ,Z)

    K:有限状态集

    Σ:有限输入符号集

    δ:转移函数 K x Σ → 2的K次方 2的K次方 :幂集,K的所有子集组成的集合

    S:非空初态集 S包含于K

    Z:一个终态集合 包含于K

    如果δ:K×(Σ∪{ε})→2的K次方 即,可以通过空串转化为2的K次方 δ(K,ε)=2的K次方 则称之为 ε - NFA

    转移图和转移表表示的NFA如下所示

    image.png