编译程序:把一种语言(源语言===高级语言)转换成另一种语言(目标语言===低级语言(汇编或者机器语言))的程序。
词法分析:对输入的字符串进行扫描和分解,识别出一个个单词及其类型;(输入是字符串,输出是<单词的种类标示符,单词的值>)
语法分析:对输入的字符串进行语法单位的识别,判断他是一个赋值语句还是一个表达式(输入是程序串,输出是是否是合法的语法单位)
语义分析与中间代码的产生:对输入的程序串进行语法的检查,并且合法的话进行初步的翻译。(输入是语法单位,输出是翻译的初步代码)
优化器:对于初步翻译得到的代码进行再次的扫描和翻译,去掉冗余。(输入是初步的翻译结果,输出是优化后的代码)
目标代码生成器:对于优化后的代码进行再次翻译,生成符合机器的最终代码。(输入是优化后的代码,输出是符合机器的目标代码)
表格和表格管理:每个阶段都会有相应的表格记录各类信息以及编译的进展状况。
出错处理:当编译的过程中有错误出现的时候应当有报错处理,具体的地点,原因,并且使得范围尽量的小,使源程序的其余部分继续执行。
遍:就是对源程序或者源程序的中间结果进行从头到尾的扫描依次,并且作出相应的处理,生成新的中间结果或者目标程序。次法分析相当于一遍,语法分析相当于一遍,但是词法、语法可以合为一遍,根据自身的内存情况而定。内存大的时候可以少几遍。因为遍数多了也是会浪费输入输出时间的。
闭包:V^n=VVVVV....V 规定V^0={e}(这里的e就是空的意思)。
V*=V^0UV^1UV^2...(其中V*是V的闭包)相当于你从0到n都被我承包了。
文法:定义一组的规则产生式的集合,如:G:
E->i
E->E+E
E->E*E
E->(E)
称为文法。其中的每一条即为产生式。
一组产生式是一个四元式(VT,VN,S,p),终结符号,非终结符号,开始符号,一组产生式。
句型:由开始符号推导出的一个串是句型,如:s-*>a;a是一个句型,如果a中只含终结符,a为句子。E->E*E中E*E是一个句型,E->i中i也是一个句型,同时也是一个句子。E的所有句子是一个语言。
语法树:句型的推导过程就是一颗语法树。
二义性:是指对于一种推导有多中不同的结果,而不是分别最左推导和最右推导有不同的结果。