[第一章:文法(语法)和语言]
[第四章:词法分析]
[第五章:自顶向下的语法分析]
[第六章:自底向上的语法分析(移进—归约分析)]
[第七章:LR分析:一种自下而上的分析方法]
[第八章:语法制导和中间代码生成]
单词的描述工具:正规式
正规式和正规集:正规式中只允许包含这几种符号 空集,空元素,或,连接(一般省略),闭包
例:
正规文法与正规式(重点难点)
正规文法 Þ 正规式
正规式Þ 正规文法
牢记这四个产生式与正规式的对应关系(尤其是正规式转正规文法用得到)
- 自动机
有限自动机:能识别正规文法所定义的语言和正规式所表示的集合(这二者是对应的)
有限自动机分为DFA(确定的~)和NFA(不确定的~)
DFA:
一个确定的有限自动机DFA M是一个五元组:M=(K, Σ, f, S, Z),其中:
K:有穷集,每个元素称为一个状态。K=S∪Z
Σ:输入状态表,元素为输入符号(写在转换箭头上面的那个)
F:转换函数
S:S∈K,唯一的初态
Z:ZÍK,终态集
确定的状态机:其确定性表现在转换函数是单值函数
加*表示终态
工作原理:对于Σ*中的任何一个字符串t,若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字符串等于t,则称t可为DFA M所识别(读出或接受)。若M的初态结点同时又是终态结点,则e可以为M所识别。
例
NFA:同样是五元组,与DFA的差别表现在:
F不是函数,而是(多值)映射,即f(W,a)={P1,P2,…,Pn}表示在当前状态W下,输入字符a时,将转换到状态P1,P2,…,Pn;
S:是非空集合,即有不止一个初态
NFA图像的表示:
每个节点可能射出多条弧,这些弧上可能有相同的字而且可以是空字ε
整张图至少含有一个初态和若干个(可以是0个)终态结点
某些结点既可以是初态也可以是终态结点
对于某个输入字符存在多个后继状态,即状态的转向是不确定的
只要一个符号串集是正规的,就存在对应可识别它的NFA
与某一NFA等价的DFA不唯一
NFA确定化---子集法:
要解决的两个问题:
解决方法:
NFA转换为DFA的步骤:设Σ={a, b, c}:构造一张表,第一行第一列为ε-closure({S});求Ia、Ib、Ic并检查,未在第一列出现过者,填入下行首列;重复下划线步骤;将状态子集重新命名
上图其实有个问题,NFA中4是终态,新的状态子集里所有包含4的都是新终态,在给这些状态命名时应该加上* 如*C、*D
DFA最小化:没有多余状态,没有等价状态 ---分割法
等价状态判定:
两个状态s,t若一致,则满足:1. 一致性(同是终态或非终态) 2. 蔓延性(三种形式:s t通过a到x;s t通过a到x y,x y等价;s t通过a到终态x y(即使x y是互不相干的终态,s t也等价)) 注意:C、F等价,是C和F发出的全部弧(a和b)都符合蔓延性
正规式和有限自动机的等价性
NFA M转正规式:
自动机上加两个节点S、Z。S结点用ε弧到自动机(M)的所有初态,自动机的所有终态用ε弧到Z; 逐步消去M’中的所有结点,直至剩下S和Z结点,在消结过程中,逐步用正规式来标记弧
例:
正规式转NFA M
例:
正规文法和有限自动机的等价性(上面的是正规式和自动机):
文法是四元组,自动机是五元组
正规文法转NFA M: 需要新增一个终态Z
NFA M 转正规文法: 对NFA的终态Z,增加一个产生式Z->ε