形式语言与自动机之一 语言与文法
形式语言与自动机之一 语言与文法
参考教材:杨娟,石川,王柏.形式语言与自动机.北京:北京邮电大学出版社,2003.
语言与文法
Def.Def.Def.
- 字母表TTT
- 字符串t,u,v,x,y,zt,u,v,x,y,zt,u,v,x,y,z及其长度
- 字符串的转置ω~\widetilde{\omega}ω
- 包括ε\varepsilonε在内的字母表TTT上的所有字符串集合T∗T^*T∗
- 不包括ε\varepsilonε在内的字母表TTT上的所有字符串集合T+T^{+}T+
- 字母表TTT上的语言LLL是T∗T^*T∗的子集
- 两个语言的积:L1L_1L1和L2L_2L2的积L1⋅L2L_1 \cdot L_2L1⋅L2,是由L1L_1L1和L2L_2L2的字符串连接所构成的字符串的集合;
语言的积不满足交换律 - 语言的幂:
L0=εLn=L⋅Ln−1L^0={\varepsilon} \\ L^n=L \cdot L^n-1L0=εLn=L⋅Ln−1 - 语言的闭包与正闭包L∗=⋃n⩾0LnL+=⋃n⩾1LnL^*=\displaystyle\bigcup_{n\geqslant0} L^n\\ L^+=\displaystyle\bigcup_{n\geqslant1}L^nL∗=n⩾0⋃LnL+=n⩾1⋃Ln
- 文法 定义语言的数学模型
- 使用Chomsky文法体系定义语言:文法G是一个四元组,G=(N,T,P,S)G=(N,T,P,S)G=(N,T,P,S)
(1)NNN 非终结符的有限集合
(2)TTT 终结符的有限集合,且N⋃T=∅N \bigcup T=\varnothingN⋃T=∅
(3)PPP 形式为α→β\alpha \rightarrow \betaα→β的生成式有限集合,且α∈(N⋃T)+,β∈(N⋃T)∗\alpha ∈(N \bigcup T)^+,\beta ∈( N \bigcup T)^*α∈(N⋃T)+,β∈(N⋃T)∗,α\alphaα至少含一个非终结符号,意味着α\alphaα不能为空串而且不能全由终结符组成
(4)SSS 起始符,S∈NS \in NS∈N - 推导:直接推导(长度为1)α⇒α0\alpha \Rightarrow \alpha_0α⇒α0,长度为0的推导α=α0\alpha=\alpha_0α=α0,长度大于0的推导α⇒G∗α0\alpha \xRightarrow[G]{*}\alpha_0α∗Gα0
- 句型:字符串α\alphaα是文法GGG的句型当且仅当S⇒G∗αS \xRightarrow [G] {*} \alphaS∗Gα且α∈(N⋃T)∗\alpha \in (N \bigcup T)^{*}α∈(N⋃T)∗
- 由文法产生的语言L(G)={ω∣ω∈T∗,S⇒G∗ω}L(G)=\lbrace\omega | \omega \in T^{*},S \xRightarrow [G] {*} \omega \rbraceL(G)={ω∣ω∈T∗,S∗Gω},即 L(G)L(G)L(G) 中的一个字符必须由 SSS 推导出,由终结符组成
- 文法分类
(1)0型:无限制 (但也有基础限制)对应无限制性语言
(2)1型:上下文有关文法。生成式的形式为α→β\alpha \rightarrow \betaα→β,其中∣α∣⩽∣β∣|\alpha| \leqslant |\beta|∣α∣⩽∣β∣,且α,β∈(N⋃T)+\alpha,\beta \in (N \bigcup T)^{+}α,β∈(N⋃T)+ 对应上下文有关语言
典型特征:左边比右边短
(3)2型:上下文无关文法。生成式的形式为A→α,A∈N,α∈(N⋃T)∗A \rightarrow \alpha,A \in N, \alpha \in (N \bigcup T)^*A→α,A∈N,α∈(N⋃T)∗ 对应上下文无关语言
典型特征:左边都是非终结符 注意2型的右边可以是ε\varepsilonε,而1型不可
(4)3型:正则文法。生成式的形式为A→ωBA \rightarrow \omega BA→ωB或A→ω,A,B∈N,ω∈T∗A \rightarrow \omega,A,B \in N, \omega \in T^*A→ω,A,B∈N,ω∈T∗称右线性文法,如果生成式的形式为A→BωA \rightarrow B\omegaA→Bω或A→ωA \rightarrow \omegaA→ω称左线性文法 对应正则语言
总结:当2型不包含 A→εA \rightarrow \varepsilonA→ε时, 3型 ∈\in∈ 2型∈\in∈ 1型∈\in∈ 0型 - 巴科斯范式(BNF, Backus Normal Form):讨论某种程序设计语言语法的一种元语言。使用::=::=::=代替生成式中的→\rightarrow→,所有的非终结符号都用<><><>括起来,左端相同的生成式的右端使用∣|∣隔开后合并成一个生成式。
- 语法图:方框表示非终结符号,圆框表示终结符号
能力要求
- 字符串的运算和闭包计算
- 由文法推导语言
- 证明从文法推导出的语言正确,证明集合等价需要证明左边包含右边,右边包含左边
- 判断文法分类
- 构造文法