·1#第一章 编译程序概论
学习目标
- 编译的各个阶段
- 编译程序的概念
- 解释器,编译程序的结构和组合
编译程序的概念
将高级语言翻译为低级语言(汇编或者机器),这种翻译叫做编译原理
编译的阶段
词法分析>语法分析>语义分析>中间代码生成>代码优化>目标代码生成
中间会有出错处理
编译阶段的组合
- 分析阶段:词法,语法,语义,只是对程序进行识别和检查
- 综合阶段:中间代码生成,代码优化,目标代码生成,对源代码进行翻译,生成目标代码
解释器和编译器
- 共同点:都是语言的一个实现系统
- 不同点: 解释器是源程序的一个执行系统,结果是执行结果。编译器是源程序的转换系统,结果是目标语言。
tips
- js,python直接使用解释器,运行过程中可以动态改变。
- 解释器没次执行都要解释一遍,所以程序运行慢。编译器编译完成后,以机器语言存储,所以执行快。
第二章 文法和语言
学习目标
- 掌握:自上而下与自下而上的分析方法
- 理解:文法的形式定义,推导,归约,句型,句子,语言,上下文无关文法,规范句型,语法树,短语,句柄
- 了解:文法的类型,文法使用的限制,文法的二义性
直观概念
语言是一个记号系统
程序设计语言包括:语法和语义
语法:一组规则,用它可以形成和产生一个和合适的程序
-
语义:
- 静态语义:一系列的规则,确定哪些合乎语法的程序是合适的
- 动态语义:表明程序要做什么
文法:语言语法的描述工具,用有穷的规则吧无穷的句子集描述出来
符号和符号串
- 字母表:元素的非空有穷集合
- 符号串:由字母表的符号组成的任何有穷序列(是有顺序的)
不含任何符号的符号串为空串。 - 其他概念:P21
文法
- 规则,产生式,生成式:a::=b a定义b
- 四元组:Vn=非终结符, Vt=终结符 P=规则集合 S=识别符或者开始符号
- 具体应用:P22
- 推导和规约 P22-23
句型,句子,语言
- 句型:字符串X是从开始符推导出来的,则x是文法G的句型。
- 文法:如果一个句型仅有终结符组成,那就是句子。
- 语言:L(G),是文法G的一切句子的集合。
上下文无关文法及其语法树
- 规范推导和规范句型:每一次推导都是替换a中,都是替换最左和最右的非终结符,则称为推导为最左(右)推导。
- 最右推导被称为规范推导
- 由规范推导得到的句型为规范句型
- 语法树:P27
- 如果一个文法存在每个句子对应两课不同的语法树,则这个文法是二义性的。
- 分析方法:自上而下和自下而上的分析方法 P30
词法分析
- 正规文法:文法中的P,即规则,都有以下形式:A->aB或A->a
- 正规式和正规集
- 正规文法和正规式的等价,相互转换(P46)
- 有穷自动机:DFA(确定的有穷自动机),NFA(不确定的有穷自动机)
- DFA:P48 DFA状态图和矩阵表示
- NFA: P49
- 把NFA用子集法转换为DFA,用DFA转换
语法分析
- 自顶向下分析
- 自底向上分析