语言执行过程: 代码--解释器编译器--机器代码--cpu执行
编译型语言:在程序在执行之前需要一个专门的编译过程,通过编译器把程序编译成为可执行文件,再由机器运行这个文件,运行时不需要重新翻译,直接使用编译的结果就行了。
解释型语言:是一边执行一边转换的,其不会由源代码生成可执行文件,而是先翻译成中间代码,再由解释器对中间代码进行解释运行,每执行一次都要翻译一次。
编译型
优点:运行速度快,代码效率高,编译后的程序不可修改,保密性较好。
缺点:代码需要经过编译方可运行,可移植性差,只能在兼容的操作系统上运行 。
解释型
优点:可移植性较好,只要有解释环境,可在不同的操作系统上运行。
缺点:运行需要解释环境,运行起来比编译的要慢,占用资源也要多一些,代码效率低,代码修改后就可运行,不需要编译过程
1. 词法分析:从左到右一个字符一个字符地读入源程序,对字符流进行扫描和分解,识别出一个个单词(也称符号)。比如标识符、保留字、整数等。空格、换行符、注释在词法分析阶段被过滤掉。
2. 语法分析:在词法分析的基础上将单词序列分解成各类语法短语,如“语句”、“表达式”等。一般这种语法短语可表示成语法树。语法分析所依据的是语言的语法规则,通常递归地定义。
3. 语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息。比如检查运算符的运算对象是否合法,完成变量的自动类型转换等等。
4. 中间代码生成:所谓中间代码是一种结构简单含义明确的记号系统,重要的设计原则为两点:一是容易生成,二是容易将它翻译成目标代码。很多编译程序采用了一种“四元式”的中间代码,即(运算符,运算对象1,运算对象2,结果)。 有的编译没有这个
5. 代码优化:对中间代码进行变换或改造,目的是使生成的目标代码更为高效,省时间和省空间。如公共表达式的删除、强度削弱、循环优化等优化工作。 有的编译没有这个
6. 目标代码生成:将中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。该工作与硬件系统结构和指令含义有关。
G=(V,T,S,P) V 非终结符 T 终结符 S 起始符 P 产生式
文法:以有穷的集合描述无穷的计划的工具。
字母表:元素的非空有穷集合,其中的元素称为符号,因此也叫符号集。
符号串:由字母表中的元素组成的任何有穷序列,串中的元素个数叫做符号串的长度,空符号串ε,长度为0。
符号串的运算:
连接-符号串x = ab,y=cd, xy = abcd
方幂-z=xn,当n = 0, z = ε,当 n = 2, z = xx
集合的闭包-∑* = ∑0 ∪∑1 ∪∑2 ∪…∪∑n
∑+ 为正闭包 = ∑1 ∪∑2 ∪…∪∑n
语法树推导:语法分析
程序基本-