文法的定义
文法就是指怎么由一堆符号组成一个有含义的句子的规则和协议。
文法的形式定义:
非终结符号集V = {<赋值语句>,<左部量>,<右部表达式>,<简单变量>,<下标变量>,<运算符>}
终结符号集T = {a,b, c,m[1],m[2],m[3], +, -}
语法规则集P = {<赋值语句>
→
\rightarrow
→<左部量>=<右部表达式> ,……}
开始符号S = <赋值语句>
类比:
- V:非终结符集 → \rightarrow →类比英语中的主谓语,名词代词等
- T:终结符集 → \rightarrow →类比英语中的he ,gave , book
- P:产生式集合 → \rightarrow →推导的规则
- S:开始符号
可以说文法是由非终结符(大写字母)和终结符(小写字母)以及 → \rightarrow →组成的。
文法的分类(Chomsky体系)
- 0型文法:短语结构文法PSG–图灵机
满足文法定义的要求即可:左边必须要包含这些元素或者元素组合中的至少一个非终结符,右边可以是这些元素的任意组合,即左边至少一个大写字母
- 1型文法:上下文有关文法CSG–线性界限自动机
对于文法G,P中任一产生式α→β的形式为α1A α2 → α1 β α2,其中α1 ,β, α2∈(V ∪ T)*, β≠ε,A ∈V
简单来说就是:右边的长度>=左边的长度(A—> a、B—>ab)
特例:β→ε也是1型文法
- 2型文法:上下文无关文法CFG–不确定的下推自动机
对于 ∀ \forall ∀α→β∈P,均有α∈V成立
简单来说就是:左边必须是非终结符(大写)
A—>a AB—>asbei 属于2型文法,而 Ab—>DE则不是
- 3型文法:正则文法RG–有穷自动机
A、B∈V,w∈T+或 ε \varepsilon ε,如果对于 ∀ \forall ∀α→β∈P, α→β
简单来说就是:满足上下文无关文法,一个非终结符推出一个终结符,要么一个非终结符推出一个终结符并且带一个非终结符
左线性(Left Linear)文法:A→Bw或A→w
右线性(Right Linear)文法:A→wB或A→w
左右线性文法不可混用
参考博客: 侃一侃编译原理的“文法”和 令人头疼的编译原理之文法