文法
描述语言的语法结构的形式规则
字母表(∑):
符号:字母表中的元素
符号串(字):符号构成的一个有穷序列
空字 ε:不包含任何符号的序列
φ:不含任何元素的空集
闭包
集合 Σ 的闭包 Σ∗ 与正闭包 Σ+ ,基于字母表 Σ 的全体符号串
设 Σ={a,b} 则:
- 正规闭包:Σ+=a,b,aa,ab,ba,bb,aaa,...
- 闭包:Σ∗=Σ+∪{ε}
如果 Σ 原来没空字,则正规闭包中没有空字
上下文无关文法
G=(VT,VN,S,P)
VT 终结符(非空),VN 非终结符(非空),VT∩VN=ϕ,S 文法的开始符号,P 产生式集合(有限)
产生式
P→α
P∈VN, α∈(VT∪VN)∗(也就是由终结符和非终结符组成的任意字符串)
产生式表达的是从非终结符转化终结符
设 S 为开始符号,S 必须在某个产生式的左部出现一次
注意:上下文无关文法的产生式的左边为 单个 非终结符
BNF
P→α1∣α2∣α3∣...
推导
若存在产生式
A→γ
则满足:
αAβ⇒αγβ
→ 代表定义,⇒ 代表直接推出\Rigtarrow
如果
α1⇒α2⇒α3⇒α4⇒...⇒αn
则称 α1 可以推导出 αn。其中每一次变化都是直接推出
基于文法 G 的语言 L(G)
L(G)={α∣S+α,α∈VT∗}
+ 代表可以从 S 开始经过一步或多步(≥1)推导出
∗ 代表可以从 S 开始经过0步或多步(≥0)推导出
最左推导:任何一步 α⇒β 都是对 α 中的最左非终结符进行替换
最右推导:任何一步 α⇒β 都是对 α 中的最右非终结符进行替换
句子、句型、短句、直接短句、句柄
G=(VT,VN,P,S)S∗αAγ
若S∗B ,则称 B 为一个句型 (就是可以由开始符号推出来的任意串包括开始符号本身)
仅含终结符号的句型为句子 (就是可以由开始符号推出,且只有终结符号)
若 A+β,则 β 是句型 αβγ 相对于非终结符 A 的短语
若 A⇒β,则 β 为直接短语
句柄:一个句型的最左直接短语
归约
推导的逆过程
α⇒ββ.α
语法树与二义性
用一张图表示一个句型的推导,这张图称为语法树,也称为推导树

二义性:文法存在某个句子对应两棵不同的语法树
- 无法在有限时间内判断是否具有二义性
- 有判断无二义性的充分非必要条件
若一个文法无二义性,对一个句型的多种推导,采用的各种推导过程,画出来的语法树是一样的。语法树并没有描述具体的推导过程,是不同推导过程的抽象共性。
子树:语法树中的一个节点及其 全部 后裔
短语:子树末端形成的符号串
直接短语:简单子树(只有二级)末端形成的符号串
句柄:位于最左边的简单子树的所有叶节点自左向右排列
乔姆斯基对语言的分类
G=(VT,VN,S,P)
产生式形如:
α→β
0 型
α,β∈(VT∪VN)∗
且 α 至少含有一个非终结符号
1 型 (上下文有关)
∣α∣≤∣β∣,仅S→ε例外
2型(上下文无关)
A→βA∈VN;β∈(VT∪VN)∗
3 型(正规文法、有限自动机)
右线性文法:
A\rightarrow\alpha B \or A\rightarrow\alpha \\
\alpha \in V_T^* ; A,B\in V_N \\
左线性文法:
A\rightarrow B\alpha \or A\rightarrow\alpha \\
\alpha \in V_T^* ; A,B\in V_N \\
总结
0 型只要求产生式左边包含非终结符
1 型还要求左边的长度要小于右边的长度
2 要求左边只能由一个非终结符组成
3 型要求右边如果有非终结符,只能出现在最左或最右