3 词法分析
一、词法分析程序
词法分析----逐个读入源程序字符并按照构词规则切分成一系列单词
主要任务:读源程序,产生单词符号
其他任务:滤掉空格,跳过注释、换行符|追踪换行标志,复制出错源程序|宏展开,……
单词符号一般可分为下列5种:
①基本字,关键字(保留字):BEGIN、 END、 IF、 THEN等
②标识符(用户自定义标识符 + 关键字): 用户定义的变量名、常数名、过程名
③常数(量):如10、25、100等整数
④运算符: 如+、-、*、/、:=、#、>=、<=等
⑤界符:如‘,’、‘.’ 、‘;’ 、‘(’ 、‘)’等
二、正规表达式与正规集(正规语言)
正规表达式----说明单词的pattern的一种重要的表示法(记号),是定义正规集的工具
定义(正规式和它所表示的正规集):
若两个正规式e1和e2所表示的正规集相同,则说e1和e2等价,写作e1=e2。
设r,s,t为正规式,正规式服从的代数规律有:
正规文法和正规式
对
∑
\sum
∑上的正规式r ,存在一个RG=(
V
N
V_N
VN,
V
T
V_T
VT,P,S): L(G)= L(r)
对G=(
V
N
V_N
VN,
V
T
V_T
VT,P,S),存在一个
∑
=
V
T
\sum=V_T
∑=VT上的正规式r : L(r)= L(G)
正规式与正规文法间的转换
三、有穷自动机
确定有穷自动机(DFA) 不确定有穷自动机(NFA)
D
F
A
\displaystyle\color{red}DFA
DFA
DFA与文法对应关系:
状态集K —
V
N
V_N
VN 字母表—
V
T
V_T
VT 转换函数f— P 初态S—S
N
F
A
\displaystyle\color{red}NFA
NFA
与DFA区别:①S为初态集 ②f函数值不唯一,即后继状态为集合
NFA的确定化 子集法
DFA是NFA的特例.对每个NFA N一定存在一个DFA M ,使得 L(M)=L(N)。
对每个NFA N存在着与之等价的DFA M ,与某一NFA等价的DFA不唯一。
对NFA确定化要解决的两个问题→确定初态唯一性、确定后继状态唯一性
DFA的最小化 分割法
最小化操作:去除多余状态、合并等价状态
四、有穷自动机和正规表达式
有穷自动机和正规表达式的等价性:
1)对于∑上的一个NFA M,可以构造一个∑上的正规式R,使得L( R)=L(M)。
2)对于∑上的一个正规式R,可以构造一个∑上的NFA M,似的L(M)=L( R)。
有穷自动机与正规表达式间的相互转换
五、有穷自动机和正规文法
有穷自动机和正规文法的等价性:
1)对于一个NFA M,都存在 一个正规文法G,使得L(G)=L(M).
2)对于一个正规文法G, 都存在一个NFA M, ,使得L(M)=L(G).
NFA与文法G[S]对应关系:
状态集K —
V
N
V_N
VN 字母表—
V
T
V_T
VT 转换函数f— P(产生式) 初态S—S(开始符号) 终态Z — 新增终态Z
有穷自动机与正规文法间的相互转换
bingo~ ✨ 成功的唯一秘诀———坚持到最后一分钟