开学的第一天,学的都是入门,所以知识比较少,但是我还是会整理出来。因为是开学第一天,事情比较忙,知识没有得到很好的消化和了解,所以今天只作初步了解,过几天会找时间重新整理,具体化。
编译原理第一课:
编译器:编译器是一种语言处理器,可以将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”。通俗的讲,就是我们目前所使用的高级语言,如C++,java,都是易于人们理解和编写的。但是对于机器来说,只能看懂机器语言(即汇编语言,属于低级语言)。所以,人们用高级语言写出来的代码,首先要经过编译器,编译成机器可识别的低级语言,才能被机器正确的执行。
解释器: 解释器是另一种常见的语言处理器,又称直译器,就是一种能够把高级编程语言一行一行直接转译运行的程序,一般用于解释性语言,如php,postscritp,javascript,python。
编译器与解释器的不同: 编译器是把整个源代码编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,而解释器则是编译一行代码即执行一行代码,因此,在效率上来说,编译器的效率要比解释器高。但是由于解释器是一行一行的编译执行,所以在错误诊断方面,解释器效果更好。
编译器与解释器的相同点:细化到编译单行来看,编译器和解释器的处理方式和结构是差不多的。在编译单行代码的时候,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。如图(参考博客 http://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html)
在这里还要了解一下编译器的结构:编译器可分为分析部分(前端)和综合部分(后端),分析部分就是通过词法分析,语法分析,语义分析将源程序分解成多个组成要素,并在这些组成要素上加上语法结构,然后使用这个结构来创建该源程序的一个中间表示(即上面的中间代码)。分析部分还会收集有关源程序的信息,并把这些信息存放在一个称为符号表(symble table)的数据结构中。符号表将和中间表示形式一起传送给综合部分(后端)。而综合部分(后端)根据中间表示(中间代码)和符号表中的信息来构造用户期待的目标程序。如实例图(顶部是一个待处理的赋值语句,lexical analyzer为词法分析,syntax analyzer为语法分析,semantic analyzer为语义分析,省略了综合部分(后端))
好吧,由于时间较为紧迫,编译器的初级介绍就到这。周末回来,继续完善本周编译原理所学的知识。(希望周末可以带来安卓的基本教程,往后还会有ps,C#的教程,一步一步来,干巴爹 ^_^)。