2.文法
字母表
字母表 ∑ \sum ∑是元素的非空有穷集合
字母表中的元素(字母、数字、标点符号等)称为符号
字符串
由字母表中的符号组成的任何有穷序列称为符号串
如果某符号串中有 m m m个符号(不同于种),称为长度
∣ x ∣ = m |x|=m ∣x∣=m ∣ ε ∣ = 0 |\varepsilon|=0 ∣ε∣=0
字符串集合
如果集合 A A A中的一切元素都是某字母表上的符号串,称 A A A为该字母表上的符号串集合
字母表运算
乘积
∑ 1 ∑ 2 = { a b ∣ a ∈ ∑ 1 b ∈ ∑ 2 } \sum_1\sum_2=\{ab|a \in \sum_1 b \in \sum_2\} ∑1∑2={ab∣a∈∑1b∈∑2}
例如: { 0 , 1 } { a , b } = { 0 a , 0 b , 1 a , 1 b } \{0,1\}\{a,b\}=\{0a,0b,1a,1b\} {0,1}{a,b}={0a,0b,1a,1b}
幂
∑ 0 = { ε } \sum^0 = \{\varepsilon \} ∑0={ε}
∑ n = ∑ n − 1 ∑ n > 1 \sum^n = \sum^{n-1}\sum \ \ \ \ \ \ n > 1 ∑n=∑n−1∑ n>1
例如: { 0 , 1 } 3 = { 0 , 1 } { 0 , 1 } { 0 , 1 } = { 000 , 001 … } \{0,1\}^3=\{0,1\}\{0,1\}\{0,1\}=\{000,001\dots\} {0,1}3={0,1}{0,1}{0,1}={000,001…}
正闭包
∑ + = ∑ ∪ ∑ 2 ∪ ∑ 3 \sum^+=\sum \cup \sum^2 \cup \sum^3 ∑+=∑∪∑2∪∑3
长度正数的符号串构成的集合
闭包/柯林闭包
∑ ∗ = ∑ 0 ∪ ∑ + \sum^*=\sum^0\cup\sum^+ ∑∗=∑0∪∑+
任意字符串(长度可为0)构成的集合
字符串运算
字符串的头尾
假设 z = xy 是一个符号串,那么x是z的头/前缀,y是z的尾/后缀
字符串连接
设x和y是符号串,连接xy是把y的符号写在x的符号之后得到的符号串
字符串的方幂
设x是符号串,把x自身连接n次得到符号串z,即z=xx…xxx,称为符号串x的方幂,写作 z = x n z=x^n z=xn
◼ x 0 = ε , x 1 = x , x 2 = x x , x 3 = x x x x^0=ε, x^1=x, x^2=xx, x^3=xxx x0=ε,x1=x,x2=xx,x3=xxx
字符串集合运算
字符串集合的乘积/连接
两个字符串集合A和B的乘积定义如下:AB={xy | x∈A 且 y∈B}
即AB是满足x属于A,y属于B的所有符号串xy所组成的集合
例:A={a,b},B={c,d},则集合AB={ac,ad,bc,bd}
文法和语言
文法:判别句子结构是否合法的依据的语言。
定义:
文法G定义为四元组(T, N, P, S)
◼ T:终结符集合(文法所定义的语言的基本符号,称为单词,token)
◼ N:非终结符集合(用来表示语法成分的符号,称为语法变量)
◼ P:规则 ɑ->β (或ɑ::=β)的集合,ɑ∈(N∪T)*且至少包含一个非终结符,
β∈(N∪T)*,标识 α → β \alpha \to \beta α→β
◼ S:识别符或开始符,非终结符,至少在一条规则中作为左部出现。开始符号,文法中最大的语法成分,将文法 G G G写成 G [ S ] G[S] G[S]
满足关系:
T ∪ N : 文 法 符 号 集 T ∩ N = 空 集 T \cup N:文法符号集\ \ \ \ \ T \cap N=空集 T∪N:文法符号集 T∩N=空集
表示
非终结符:<>,大写字母
终结符:小写字母,不用<>括起来的
对一组有相同左部的ɑ产生式: α → β 1 α → β 2 \alpha \to \beta_1 \ \ \alpha \to \beta_2 α→β1 α→β2
简记为: α → β 1 ∣ β 2 \alpha \to \beta_1|\beta_2 α→β1∣β2
终结符:
- 小写字母
- 运算符
- 标点符号
- 数字
- 粗体字符串:id,if
非终结符
- 大写字母
- S
- 小写斜体:expr,stmt
推导
γαδ => γβδ : γαδ 直接产生/推导出γβδ ,或者γβδ直接归约到γαδ
例子:假设有规则P={S->0S1, S->01}
1、0S1 => 0011,使用的规则:S->01,γ=0,δ=1
2、S => 0S1,使用的规则: S->0S1,γ=ε,δ=ε
a 0 → a 1 a 1 → a 2 … a n − 1 → a n a_0 \to a_1\ a_1\to a_2 \dots a_{n-1} \to a_n a0→a1 a1→a2…an−1→an
称符号串 a 0 a_0 a0经过 n n n步推导出 a n a_n an,简记为 a 0 → n a n a_0 \to^n a_n a0→nan
a → 0 a a \to^0 a a→0a
句型和句子
如果 S → ∗ a , a ∈ ( T ∪ N ) ∗ S \to^* a,a\in(T \cup N)^* S→∗a,a∈(T∪N)∗,则称 a a a是 G G G的一个句型
句子是不包含非终结符的句型
例子:S、0S1、000111是句型,000111是句子
语言:由S推导出的所有句子构成的集合称为文法G生成的语言,记为 L ( G ) L(G) L(G)
文法的类型
给出了从0到3一共四类的文法,内层是外层的子集
• 0型文法:任意文法
• 1型文法:上下文有关文法
• 2型文法:上下文无关文法,描述语法结构
• 3型文法:正则/正规文法,与正则表达式等价,描述词法结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IBiBrBGd-1641903164044)(…/picture/68.png)]
1型
每个产生式ɑ->β均满足 |β| ≥ |ɑ|,仅S->ε除外
有些定义中将产生式描述为:ɑ1Aɑ2->ɑ1βɑ2,β≠ε,表示只有A出现在上下文中,才允许取代A,体现上下文有关
2型
对于产生式A->β,A是一个非终结符
A->β,用β取代非终结符A时,与A所在的上下文无关
3型
每个产生式形式都是
▪ 右线性文法:A->aB 或 A->a
03164044)]
1型
每个产生式ɑ->β均满足 |β| ≥ |ɑ|,仅S->ε除外
有些定义中将产生式描述为:ɑ1Aɑ2->ɑ1βɑ2,β≠ε,表示只有A出现在上下文中,才允许取代A,体现上下文有关
2型
对于产生式A->β,A是一个非终结符
A->β,用β取代非终结符A时,与A所在的上下文无关
3型
每个产生式形式都是
▪ 右线性文法:A->aB 或 A->a
▪ 左线性文法:A->Ba 或 A->a