绪论
字母表
概念:形式符号的非空有限集合
集合:常用 Σ \Sigma Σ表示
字符串
概念:字母表 Σ \Sigma Σ上的一个字符串,为 Σ \Sigma Σ中字符构成的有限序列
空串:常用 ε \varepsilon ε表示
幂运算:设 Σ \Sigma Σ为字母表, n n n为任意自然数,定义
(1) Σ 0 = { ε } \Sigma^0=\{\varepsilon\} Σ0={ ε}
(2)设 x ∈ Σ n − 1 , a ∈ Σ x\in \Sigma^{n-1},a\in \Sigma x∈Σn−1,a∈Σ,则 a x ∈ Σ n ax\in \Sigma^{n} ax∈Σn
(3) Σ n \Sigma^{n} Σn中元素只能由(1)(2)生成
字母表中可以包含空字符,所以 Σ i \Sigma^i Σi的元素的长度不一定为 i i i
*闭包: Σ ∗ = Σ 0 ∪ Σ 1 ∪ . . . \Sigma^{*}=\Sigma^0\cup\Sigma^1\cup... Σ∗=Σ0∪Σ1∪...
+闭包: Σ + = Σ 1 ∪ Σ 2 ∪ . . . \Sigma^{+}=\Sigma^1\cup\Sigma^2\cup... Σ+=Σ1∪Σ2∪...
语言
概念:设 Σ \Sigma Σ为字母表,则任何集合 L ⊆ Σ ∗ L\subseteq\Sigma^* L⊆Σ∗是字母表 Σ \Sigma Σ上的一个语言
语言的连接: L M = { w 1 w 2 ∣ w 1 ∈ L ∧ w 2 ∈ M } LM=\{w_1w_2|w_1\in L\wedge w_2\in M\} LM={ w1w2∣w1∈L∧w2∈M}
语言的闭包: L ∗ = L 0 ∪ L 1 ∪ L 2 . . . L^*=L^0\cup L^1\cup L^2... L∗=L0∪L1∪L2...
上下文无关语言与下推自动机
设 Σ = { 0 , 1 } , L = { 0 n 1 n ∣ n ≥ 1 } \Sigma=\{0,1\},L=\{0^n1^n|n\geq 1\} Σ={ 0,1},L={ 0n1n∣n≥1}
下推自动机识别:维护一个栈,转移方向由栈顶和字符共同确定,每次转移识别一个字符并对栈进行修改
图灵机及其语言
设 Σ = { 0 , 1 , 2 } , L = { 0 n 1 n 2 n ∣ n ≥ 1 } \Sigma=\{0,1,2\},L=\{0^n1^n2^n|n\geq 1\} Σ={ 0,1,2},L={ 0n1n2n∣n≥1},则不存在任何自动机和下推自动机可以识别该语言,但是总存在一个图灵机可以识别
归纳证明法
1.基础:至少包含集合中一个元素
2.归纳:由已知元素生成新元素
3.极小性限制:集合中的元素只能由1、2生成
上下文无关文法与上下文无关语言
##上下文无关文法的基本概念
设 ∑ = { 0 , 1 } , L = { 0 n 1 n ∣ n ≥ 1 } \sum=\{0,1\},L=\{0^n1^n|n\geq 1\} ∑={ 0,1},L={ 0n1n∣n≥1}
则接受该语言的文法为 S → 01 S\rightarrow01 S→01, S → 0 S 1 S\rightarrow 0S1 S→0S1
四个基本要素:终结符集合 T T T,非终结符集合 V V V,开始符号 S S S,产生式集合 P P P
一个上下文无关文法是一个四元组 G = ( V , T , P , S ) G=(V,T,P,S) G=(V,T,P,S),其中 V ∩ T = ∅ V\cap T=\varnothing V∩T=∅, S ∈ V S\in V S∈V,产生式规则形如 A → α A\rightarrow \alpha A→α, α ∈ ( V ∪ T ) ∗ \alpha \in(V\cup T)^{*} α∈(V∪T)∗
对于文法: E → E O E E\rightarrow EOE E→EOE , E → ( E ) E\rightarrow (E) E→(E) , E → v E\rightarrow v E→v , E → d E\rightarrow d E→d , O → + O\rightarrow + O→+ , O → ∗ O\rightarrow * O→∗
G = ( { E , O } , { ( , ) , + , ∗ , v , d } , P , E ) G=(\{E,O\},\{(,),+,*,v,d\},P,E) G=({ E,O},{ (,),+,∗,v,d},P,E)
缩记方式: E → E O E ∣ ( E ) ∣ v ∣ d E\rightarrow EOE|(E)|v|d E→EOE∣(E)∣v∣d
归约与推导
推理字符串是否符合文法定义语言,归约是由字符串推出开始符号,推导是由初始符号推出字符串
计算机实现归约(CKY算法):动态规划,全枚举,由于 E → ( E ) E\rightarrow (E) E→(E)是三叉,时间复杂度较高
计算机实现推导(EARLY算法):维护两个栈,将规则推入栈中进行探索
最左推导:每一步替换最左边的非终结符
最右推导:
句型:设 C F G G = ( V , T , P , S ) CFG\;\;G=(V,T,P,S) CFGG=(V,T,P,S),称 α ∈ ( V ∪ T ) ∗ \alpha\in (V\cup T)^* α∈(V∪T)∗为 G G G的一个句型,当且仅当 S → ∗ α S\overset{*}{\rightarrow}\alpha S→∗α
若 S → l m ∗ α S\xrightarrow[lm]{*}\alpha S∗lmα,称 α \alpha α是一个左句型
若句型 α ∈ T ∗ \alpha\in T^* α∈T∗,则称 α \alpha α为一个句子
上下文无关语言
设 C F G G = ( V , T , P , S ) CFG\;\;G=(V,T,P,S) CFGG=(V,T,P,S),定义 G G G的语言为 L ( G ) = { w ∣ w ∈ T ∗ ∧ S → G ∗ w } L(G)=\{w|w\in T^*\wedge S\xrightarrow[G]{*} w\} L(G)={ w∣w∈T∗∧S∗Gw}
上下文无关语言:由CFG生成的语言
证明给定语言L是某个文法G的语言
一般步骤: i f w ∈ G t h e n w ∈ L ( G ) if \;w\in G\;then\;w\in L(G) ifw∈Gthenw∈L(G); i f w ∈ L ( G ) t h e n w ∈ L if\;w\in L(G)\;then\;w\in L ifw∈L(G)thenw∈L
文法与语言的Chomsky分类方法
文法: G = ( V , T , P , S ) G=(V,T,P,S) G=(V,T,P,S)
0型文法:产生式形如 α → β \alpha \rightarrow \beta α→β ,其中 α \alpha α中至少包含一个非终结符,相当于图灵机
1型文法:产生式形如 α → β \alpha \rightarrow \beta α→β , ∣ α ∣ ≤ ∣ β ∣ |\alpha|\leq |\beta| ∣α∣≤∣β∣ ,当 S → ε S\rightarrow \varepsilon S→ε例外,且S不得出现在任何产生式右侧,上下文有关文法,相当于线性有界自动机
2型文法:产生式形如 A → β A\rightarrow \beta A→β ,其中 A ∈ V A\in V A∈V,上下文无关文法,下推自动机
3型文法:产生式形如 A → a B A\rightarrow aB A→aB或 A → a A\rightarrow a A→a,正规文法,有限状态自动机
语法分析树
语法分析树:推导过程自上而下构成一棵树,满足以下条件
(1)每个内部节点由一个非终结符标记
(2)每个叶节点或由一个非终结符,或由一个终结符,或由 ε \varepsilon ε标记,但是当为 ε \varepsilon ε标记,为父节点唯一孩子
(3)若一个内部节点标记为A,孩子从左到右为 X 1 . . . X k X_1...X_k X1...Xk,则 A → X 1 . . . X k A\rightarrow X_1...X_k A→X1...Xk为产生式
语法树的果实:叶节点从左到右连接起来
文法和语言中的二义性
存在句子对应至少两个语法分析树/最左推导的文法是有二义性的
上下文无关语言L的所有文法都是二义性的,则称L为固有二义性
例: L = { a n b n c m d m ∣ n ≥ 1 , m ≥ 1 } ∪ { a n b m c m d n ∣ n ≥ 1 , m ≥ 1 } L=\{a^nb^nc^md^m|n\geq1,m\geq 1\}\cup\{a^nb^mc^md^n|n\geq1,m\geq 1\} L={ anbncmdm∣n≥1,m≥1}∪{ anbmcmdn∣n≥1,m≥1}
消除二义性的方式:
算符优先级联(将一种算符处理完再处理别的算符)
左结合(左算符优先)
最近嵌套匹配(消除悬垂else二义性)
正规表达式与正规语言
正规表达式
作用于正规表达式的三种运算:
L ∪ M = { w ∣ w ∈ L ∨ w ∈ M } L\cup M=\{w|w\in L\vee w\in M\} L∪M={ w∣w∈L∨w∈M}
L ⋅ M = { w 1 w 2 ∣ w 1 ∈ L ∧ w 2 ∈ M } L\cdot M=\{w_1w_2|w_1\in L\wedge w_2\in M\} L⋅M={ w1w2∣w1∈L∧w2∈M}
L ∗ = ∪ i ≥ 0 L i L^*=\cup_{i\geq 0}L^i L∗=∪i≥0Li
语法:设字母表 Σ \Sigma Σ,正规表达式集合 R R R
基础: ε , ∅ ∈ R \varepsilon,\varnothing \in R ε,∅∈R a ∈ Σ ⇒ a ∈ R a\in \Sigma\Rightarrow a\in R a∈Σ⇒a∈R ∀ 变 量 L ∈ R \forall 变量 L \in R ∀变量L∈R
归纳: E ∈ R ∧ F ∈ R ⇒ E + F ∈ R E\in R\wedge F\in R\Rightarrow E+F\in R E∈R∧F∈R⇒E+F∈R; E ∈ R ∧ F ∈ R ⇒ E F ∈ R E\in R\wedge F\in R\Rightarrow EF\in R E∈R∧F∈R⇒EF∈R; E ∈ R ⇒ E ∗ ∈ R E\in R\Rightarrow E^*\in R E∈R⇒E∗∈R; E ∈ R ⇒ ( E ) ∈ R E\in R\Rightarrow (E)\in R E∈R⇒(E)∈R
语义:对每个不含变量的 E ∈ R E\in R E∈R , E E E的语言 L ( E ) L(E) L(E) 递归定义如下
基础: L ( ε ) = { ε } L(\varepsilon)=\{\varepsilon\} L(ε)={ ε}; L ( ∅ ) = ∅ L(\varnothing)=\varnothing L(∅)=∅; a ∈ Σ ⇒ L ( a ) = { a } a\in \Sigma \Rightarrow L(a)=\{a\} a∈Σ⇒L(a)={ a}
归纳: E ∈ R ∧ F ∈ R ⇒ L ( E + F ) = L ( E ) ∪ L ( F ) E\in R\wedge F\in R\Rightarrow L(E+F)=L(E)\cup L(F) E∈R∧F∈R⇒L(E+F)=L(E)∪L(F) ; E ∈ R ∧ F ∈ R ⇒ L ( E F ) = L ( E ) L ( F ) E\in R\wedge F\in R\Rightarrow L(EF)=L(E)L(F) E∈R∧F∈R⇒L(EF)=L(E)L(F) ; E ∈ R ⇒ L ( E ∗ ) = ( L ( E ) ) ∗ E\in R \Rightarrow L(E^*)=(L(E))^* E∈R⇒L(E∗)=(L(E))∗ ; L ( ( E ) ) = L ( E ) L((E))=L(E) L((E))=L(E)
算符优先级:()>*>·>+
派生运算符: L + = L L ∗ L^+=LL^* L+=LL∗; L ? = ε + L L?=\varepsilon+L L?=ε+L; L n = L L n − 1 L^n=LL^{n-1} Ln=LLn−1
正规语言
对于字母表 Σ \Sigma Σ上的语言 R R R,若存在 Σ \Sigma Σ上的正规表达式 E E E,满足 L ( E ) = R L(E)=R L(E)=R,则 R R R是正规语言
代数定律:
交换律和结合律
零元: ∅ + L = L + ∅ = L ∅ L = L ∅ = ∅ \varnothing+L=L+\varnothing =L\;\;\;\;\varnothing L=L\varnothing=\varnothing ∅+L=L+∅=L∅L=L∅=∅
幺元: ε L = L ε = L \varepsilon L=L\varepsilon=L εL=Lε=L
分配律
等幂律: L + L = L L+L=L L+L=L
与闭包相关的定律
代数定律具体化
例:验证 L + M L = ( L + M ) L L+ML=(L+M)L L+ML=(L+M)L是否成立,只需验证对于具体符号 a + b a = ( a + b ) a a+ba=(a+b)a a+ba=(a+b)a是否成立,显然 a a aa aa属于后者不属于前者
有限状态自动机
有限状态自动机:有限状态集,有限输入符号集,转移函数,一个开始状态,终态集合
确定有限状态自动机
确定有限状态自动机DFA是一个五元组 A = ( Q , Σ , δ , q 0 , F ) A=(Q,\Sigma,\delta,q_0,F) A=(Q,Σ,δ,q0,F)
其中, δ : Q × Σ → Q \delta:Q\times \Sigma\rightarrow Q δ:Q×Σ→Q, q 0 ∈ Q q_0\in Q q0∈Q, F ⊆ Q F\subseteq Q F⊆Q
扩展转移函数,适合输入字符串: δ ′ : Q × Σ ∗ → Q \delta':Q\times \Sigma^*\rightarrow Q δ′:Q×Σ∗→Q
∀ q ∈ Q \forall q \in Q ∀q∈Q,有 δ ′ ( q , ε ) = q \delta'(q,\varepsilon)=q δ′(q,ε)=q,若 w = x a ( x ∈ Σ ∗ , a ∈ Σ ) w=xa\;\;(x\in \Sigma^*,a

最低0.47元/天 解锁文章
645

被折叠的 条评论
为什么被折叠?



