对于每天奋斗在一线,用Java,C++,C#,Python等高级编程语言写程序的程序员们来说,理解编译器是如何将高级语言编译成汇编语言,有助于我们更好的理解计算机编程。
编译器将高级语言转化成汇编语言主要经过三个步骤:词法分析、语法分析、语法树解析。
第一步:词法分析
最开始的时候,高级语言编写的程序对编译器来说只是一连串的单个字符组成的字符串。为了让编译器识别这一连串的字符串,需要逐个字符的读取源程序,然后将其切分成有意义的单词,这些被切分后的单词在编译器眼里是以 <标识,语义值>对 的形式存在。
为了从源程序字符串中依次找出单词,编译器需要具有扫描功能,通常这种扫描器可以用一组有限状态机来实现。为了说明有限状态机是怎么一回事,下面给出一个实例。
下图为一个识别数字的有限状态机,数字由整数部分和可选的小数部分组成。因此,根据这个有限状态机,142和3.141593都能被识别成一个有效的数字。
图一:有限状态机
绿色的结点用环形标志,表示他们是“可接受”的状态,也就是说,只要我们的状态达到了绿色的结点,就表示我们之前读取到的数据是一个有效的数字。例如,从图中的start处开始,如果我们读到的数字是42.15,那么依次经历的状态是(1,2,2,3,3,3),由于这一系列状态最终以“可接受”的状态结束(也就是图中的状态3),因此我们就读取到了一个有效的数字。而且读取