符号约定






文法的形式化定义

V
T
V_T
VT:终结符是文法所定义的语言的基本符号,有时也称为token。(对应词义分析)
V
N
V_N
VN:非终结符是用来表示语法成分的符号,有时也称为"语法变量",可以推出其它的语法成分(对应语法分析)
P
P
P:
S
S
S:
S
∈
V
N
S∈V_N
S∈VN , 开始符号表示的是该文法中最大的语法成分
示例
产生式的简写

文法分类体系
0型文法
- 又称为无限制文法或短语结构文法(PSG)
例如,有0型文法 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=(VN,VT,P,S),其中 V N = { A , B , S } , V T = { 0 , 1 } V_N=\{A,B,S\},V_T=\{0,1\} VN={A,B,S},VT={0,1}
P = { S → 0 A B , 1 B → 0 , B → S A ∣ 01 , A 1 → S B 1 , A 0 → S 0 B } P=\{S→0AB,1B→0,B→SA|01,A1→SB1,A0→S0B\} P={S→0AB,1B→0,B→SA∣01,A1→SB1,A0→S0B}
1型文法
- 又称为上下文有关文法(CSG)
- CSG中不包含ε产生式
例如,有1型文法 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=(VN,VT,P,S),其中 V N = { A , B , S } , V T = { a , b , c } V_N=\{A,B,S\},V_T=\{a,b,c\} VN={A,B,S},VT={a,b,c}
P = { S → a S A ∣ a b B , B A → B A ′ , B A ′ → A A ′ , A A ′ → A B , b B → b c , c B → c c } P=\{S→aSA|abB,BA→BA',BA'→AA',AA'→AB,bB→bc,cB→cc\} P={S→aSA∣abB,BA→BA′,BA′→AA′,AA′→AB,bB→bc,cB→cc}
2型文法
- 又称为上下文无关文法(CFG)
- 上下文无关文法可用于描述语法构造
例如,有2型文法 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=(VN,VT,P,S),其中 V N = { A , B , S } , V T = { a , b } V_N=\{A,B,S\},V_T=\{a,b\} VN={A,B,S},VT={a,b}
P = { S → a B ∣ b A , A → a ∣ a S ∣ b A A , B → b ∣ b S ∣ a B B } P=\{S→aB |bA,A→a|aS|bAA,B→b|bS|aBB\} P={S→aB∣bA,A→a∣aS∣bAA,B→b∣bS∣aBB}
3型文法
- 又称为正则文法,包括左线性文法和右线性文法
- 正则文法可用来描述大多数单词,但是,它的生成能力有限,几乎描述不了语法构造
- 正则文法一般用于词法分析,通过NFA、DFA就可以识别
- 两套规则不能同时出现在一个语法中,只有完全满足其中的一个才能算 3型文法。
文法分类体系间的关系

有关文法的实用限制和变换
- 文法中不能含有形如 A → A A→A A→A 的规则,这种规则称为有害规则。这样的规则对描言显然是没有必要的,并且它还会引起文法的二义性。所以在设计文法时,应该避免定义里的规则。
- 文法中不能有多余规则。所谓多余规则是指文法中出现以下两种规则的情况,一是某条规则 A → α A→α A→α 的左部符号 A A A 不在所属文法的任何其他规则右部出现,即在推导文法的所有句子中始终都不可能用到的规则;二是对文法中的某个非终结符A,无法从它推导出任何终结符号串来。
参考地址: