文法 语言 自动机 产生式规则
0-型 递归可枚举语言 图灵机 α -> β(无限制)
1-型 上下文相关语言 线性有界非确定图灵机 α''A''β -> αγβ
2-型 上下文无关语言 非确定下推自动机 ''A'' -> γ
3-型 正规语言 有限状态自动机 ''A'' -> ''aB''
''A'' -> ''a''

上表是乔姆斯基文法谱系,一个类型的文法的语言被对应的自动机接受。0型文法达到目前可以制造的最强机器——图灵机。更进一步的神谕机等被称作”超图灵计算“,包含在可计算理论内。

文法G是一个四元组(VN,VT,P,S)(V_N,V_T,P,S)
VNV_N:非终结符集
VTV_T:终结符集
PP:产生式集合
SS:开始符号

产生式αβ\alpha \to \beta

0型文法(PSG):α(VNVT)\alpha \subset (V_N \cup V_T)*,且至少包含一个VNV_N
β(VNVT)\beta \subset (V_N \cup V_T)*,对产生式没有任何限制
0型文法也称短语文法,0型文法的能力相当于图灵机。任何0型语言都是递归可枚举的,递归可枚举集必定是0型语言。在0型文法的基础上对其产生式形式作出限制,得出1,2,3型文法的定义。

1型文法是context-sensitive,对任一产生式αβ\alpha \to \beta都有β>=α\lvert \beta \rvert >= \lvert \alpha \rvert,仅仅SϵS \to \epsilon除外(|β|表示的是β的长度。
注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。 )
产生式的形式描述:α1Aα2α1Aα2{\alpha}_1 A {\alpha}_2 \to {\alpha}_1A{\alpha}_2
(α1{\alpha}_1α2{\alpha}_2β(VNVT)\beta \subset (V_N \cup V_T)*βϵ\beta \ne \epsilonAVNA \in V_N)A只有出现在α1α2的上下文中,才允许用β替换。
  产生的语言称“上下文有关语言”但S不能出现在产生式的右部。

2型文法是CFG(Context Free Gramma):对任一产生式αβ\alpha \to \beta,都有αVN,β(VNVT)\alpha \in V_N,\beta \in (V_N \cup V_T)*
产生式的形式描述:Aβ(AVN)A \to \beta (A \in V_N)
β\beta取代A时,与A所处上下文无关。产生的语言称“上下文无关语言”

3型文法(RG),也称正规文法
每个产生式均为AαBA \to \alpha B或“ AαA \to \alpha ”——右线性
ABaA \to BaAaA \to a左线性。其中A,BVN,aVTA,B \in V_N,a \in V_T*。产生的语言称为正规语言。

词法分析

    Thompson算法,子集构造算法(DFA,NFA),Hopcroft算法

语法分析

    LL(1),消除左递归,提取公共左因子,构造预测分析表,分析过程
    LR(0),构造DFA,构造LR(0)分析表,进行语法分析,写出过程
    短语,巨型,产生式,直接短语,句柄概念

语义分析(语法制导翻译)

    逆波兰表示法
    if,while的逆波兰

中间代码生成(生成汇编)

    数组、if、while的中间代码

代码生成优化

    DAG图的优化

执行汇编(3地址或4地址代码的汇编执行)

参见:

Build Your Own Lisp翻译
此书使用了C语言设计lisp的编译器。以此作为C语言入门,学习C语言的同时认识程序语言的实现。
MyForth
使用C语言构建一个Forth解释器,相对简单。