编译原理(清华大学版)第三章

第三章 词法分析

正规式、正规文法

\(G=(V_N,V_T,P,S)\),如果P中每一个产生式的形式都是\(A\rightarrow aB\)\(A\rightarrow a\),其中\(A,B\)都是非终结符,\(a\in V_T^*\),则是3型正规文法

  • 正规文法所描述的是\(V_T\)上的正规集,即通过\(V_N,V_T,P,S\)来表示。
  • 正规式也称正则表达式。通过符号的有序连接来表示。

正规式递归定义:

设字母表为\(\sum\),辅助字母表\(\sum ’=\{\varnothing,\epsilon ,|,.,*,(,) \}\)

  1. \(\epsilon\)\(\varnothing\)都是\(\sum\)上的正规式,它们表示的正规集分别为\(\{\epsilon\}\)\(\varnothing\)
  2. 任何\(a\in \sum,a\)都是\(\sum\)上的一个正规式,表示的正规集为\(\{a\}\)
  3. 假定\(e_1\)\(e_2\)都是\(\sum\)上的正规式,他们表示的正规集分别为\(L(e_1),L(e_2)\),那么\((e_1)、(e_1|e_2)、e_1*e_2、e_1^*\)也都是正规式,表示的正规集为\(L(e_1)、L(e_1)\cup L(e_2)、L(e_1)L(e_2)、(L(e_1))^*\)
  4. 仅由有限次使用上述三个步骤而定义的表达式才是\(\sum\)上的正规式,仅由这些正规式所表示的符号串的集合才是\(\sum\)上的正规集。

正规式符合的代数规律

  1. \[r|s = s|r \space\space 或的交换律 \]

  2. \[r|(s|t)=(r|s)|t \space\space 或的可结合律 \]

  3. \[(rs)t=r(st)\space\space 连接的可结合律 \]

  4. \[r(s|t)=rs|rt,(s|t)r=sr|tr \space\space 分配律 \]

  5. \[\epsilon r= r,r\epsilon=r\space\space \epsilon为恒等元素 \]

  6. \[r|r=r \space\space 或的抽取律 \]

正规式和正规文法的等价性

  1. 将正规式转换为正规文法

    重点是两个基本正规式产生式:

    • \[形如A\rightarrow x^*y的正规式产生式重写为 \\ A\rightarrow xB \\ A\rightarrow y\\ B\rightarrow xB\\ B\rightarrow y \]

    • \[形如A\rightarrow x|y正规式产生式,重写为\\ A\rightarrow x \\ A\rightarrow y \]

  2. 将正规文法转换为正规式

规则 文法产生式 正规式
规则 1 \(A\rightarrow xB\space\space B\rightarrow y\) \(A=xy\)
规则 2 \(A\rightarrow xA|y\) \(A\rightarrow x^*y\)
规则 3 \(A\rightarrow x \space\space A\rightarrow y\) $A\rightarrow x|y $

有穷自动机

作用:识别正规集,识别正规文法定义的语言和正规式表示的集合。

分类:

  • 确定的有穷自动机DFA
  • 不确定的有穷自动机NFA

确定的有穷自动机

定义:是一个五元组

\[M=(K,\sum,f,S,Z) \]

  1. \(K\)是一个有穷集,每一个元素称为一个状态
  2. \(\sum\)是一个有穷字母表,每个元素称为一个输入符号,也称为输入符号表。
  3. \(f\)是转换函数,是\(K\times \sum \rightarrow K\)上的映像。
  4. \(S\in K\),是唯一的一个初态。
  5. \(Z\subseteq K\),是一个终态集,也称之为接收状态或结束状态。

可接受的定义

  • 对于\(\sum ^*\)中的任意符号串\(t\),若存在一条从初态节点到某一终态节点的道路,且这条路上所有的弧的标记符连接成的符号串等于\(t\),则称\(t\)可为\(DFA\space M\)所接受,若\(M\)的初态节点同时又是终态节点,则空字可为\(M\)所识别(接受)。

  • \(t\in \sum^*,f(S,t)=P\),其中\(S\)\(DFA\space M\)的开始状态,\(P\in Z\)\(Z\)是终态集。则称\(t\)可为\(DFA\space M\)所接受。

拓展:

​ 设\(Q\in K\),函数\(f(Q,\epsilon)=Q\)​。(如果输入符号是空串,则停留在原来的状态上)

​ 一个输入符号串\(t\)(将它改写为\(t_1t_x\)的形式,其中\(t_1\in \sum\)\(t_x\in \sum^*\)),在\(DFA\space\space M\)运行的定义为:

\[f(Q,t_1t_x)=f(f(Q,t_1),t_x) \]

考点:证明某某字符串是可接受的。

不确定的有穷自动机

定义:是一个五元组

\[M=(K,\sum,f,S,Z) \]

  1. \(K\)是一个有穷集,每一个元素称为一个状态
  2. \(\sum\)是一个有穷字母表,每个元素称为一个输入符号,也称为输入符号表。
  3. \(f\)是转换函数,是\(K\times \sum^*\)\(K\)的全体子集的映像,即\(K\times \sum^*\rightarrow 2^K\),其中\(2^K\)表示\(K\)的幂集。
  4. \(S\in K\),是非空初态集。
  5. \(Z\subseteq K\),是一个终态集,也称之为接收状态或结束状态。

NFA转换为等价的DFA

确定有穷自动机的化简

正规式和有穷自动机的等价性

正规式和有穷自动机的等价性

posted @ 2024-04-16 20:12  Graffiti404  阅读(98)  评论(0编辑  收藏  举报