语言发展
机器语言——汇编语言——高级语言
汇编:将汇编语言翻译成机器语言的过程
编译:将高级语言翻译成汇编或者机器语言的过程
编译阶段
词法分析
从左向右逐行扫描程序的字符,识别出各个字符,确定单词的类型。
每个单词表示如下:
token:<种别码, 属性值>
一词一码表示的是每个单词都有一个种别码,而属性值不用定义,多词一码表示共用一个种别码,但是要给出属性值,而且属性值是不一样的。一型一码同一词一码。
语法分析
语义分析
中间代码生成和编译器后端
--------------------省略---------------
其实上课大概就讲到语义分析,重点是在词法和语法分析,后面想深入学习编译的可以自己再去看一下
语言及其文法
字母表
文法
推导
句型和句子
文法的分类
可能看图片有点难以理解,说一下大概要点:
0型文法是左部至少包含一个非终结符,1型文法(上下文有关文法)是左部的长度要小于等于右部的长度,且右部不包含空字符,2型文法(上下文无关文法)是每个产生式的左部一定是一个非终结符,3型文法(正则文法),分为右线性和左线性文法,具体看上面那个截图。
CFG(上下文无关文法(2型文法))分析树
句型的短语
从上面可以看出,短语就是每个非终结符根节点得到的。
直接短语:看哪个父节点下面只有一层,看上面那个例子,第三层下面只有一层,说明他只有两层,所以E+E是他的直接短语。(直接短语一定是产生式的右部,为什么?理解一下)
正则表达式
有穷自动机
有穷自动机的分类(FA)
两者有什么区别呢?区别就是NFA的一个字母表可以转换到多个状态,而DFA只有一个。
但是NFA和DFA是等价的,也就是说他们是可以互相转换的!
同时正则文法(即3型文法)、NFA和DFA也都是等价的。
可以看到,这两个也是依然具有等价性。
从正则表达式到有穷自动机
一般我们都是将先把正则表达式转为NFA,再从NFA转为DFA
正则表达式转为NFA
NFA转换为DFA
可以看到,NFA转换为DFA是通过集合来转换的。
关于NFA转为DFA可以看一下这篇文章。
关于具体的可以看一下这篇文章
语法分析
自顶向下分析
这个可以看一下我之前总结的关于自顶向下的文章。
自下向上的分析
这个分为两个:
算符优先分析法
这个东西刚开始看会有点懵逼,然后看多几次就会好很多,主要是要对一些概念的理解。
算符文法的定义:
算符优先文法的定义:
算法优先文法的构造:
素短语:
最左素短语:
算符优先分析算法:
优先函数:
优先函数的构造: