本文参考自《自己动手写编译器、链接器》(DIY Compiler and Linker) 王博俊、张宇编著 《编译原理及编译程序构造》 张莉、杨海燕、史晓华、金茂忠、高仲仪编著
形式语言使用文法和自动机来描述的。文法用于生成语言,自动机用于识别语言。
文法分类
乔姆斯基(Chomsky)对文法的定义: G=(V,Vt,P,Z)
V :符号集合
Vt :终结符号集合, Vt⊂V
P :有穷规则集合
Z :识别符号, Z∈V−Vt ,即 V∈Vn , Vn代表非终结符
0型文法
α→β : α∈V+,β∈V∗ ,且 α 中至少含有一个 Vn 。
又称为无限制文法。识别器为图灵机。
0型文法对文法规则不做限制,从而使定义的语言提供充分的描述功能,但不保证语言的递归性,即不保证语句合法的可判性,所以很少用于定义自然语言。
1型文法
α→β : 在0型文法的基础上,要求 |β|>|α|(|β|代表β的长度) 。
(或者这样定义: xUy::=xuy,其中U∈Vn,x,y∈V∗,u∈V+ )
又称为上下文有关文法,用于描述上下文有关语言。识别器为线性有界自动机。
文法左部允许有多个符号(至少一个是非终结符),以指示上下文的相关性。
文法要求右部符号个数不少于左部,确保了语言的递归性,即语句合法的可判性。
2型文法
α→β : 在1型文法的基础上,要求 α 为非终结符。
(或者这样定义: U::=u,其中U∈Vn,u∈V∗ )
又称为上下文无关文法,用于描述形式语言。识别器为下推自动机。
之所以称之为上下文无关,由上面的定义可以看出,当把
U
重写为
例如:
A→Ba
为上下文无关文法,而
Ab→Bab
为上下文有关文法,因为左部
α=Ab
,这就意味着想要翻译非终结符
A
为
3型文法
在2型文法的基础上,满足:
A→a|aB(右线性)A→a|Ba(左线性) 。又称为正规文法,或正则文法,用于描述正则语言。识别器为有限状态自动机(FA, Finate Automat)。
3型文法表示形式高度受限,使得正则语言可以使用有限状态机程序自动进行分析。面向正则语言的有限状态自动机以文法左部的非终结符作为当前状态,文法右部的终结符作为输入,文法右部的非终结符作为下一状态,若终结符后没有非终结符,则自动机在此处处于结束状态,停机。若输入结束后自动机处于结束状态,则输入合法,否则不合文法。
文法/语言之间的关系
L3⊂L2⊂L1⊂L0
正则文法⊂上下文无关文法⊂上下文有关文法⊂ 无限制文法
正规语言⊂上下文无关语言⊂上下文有关语言⊂递归可枚举语言