MENU

《两周自制脚本语言》——第一天(来,我们一起做些什么吧)

December 14, 2018 • Read: 592 • 编译原理

笔记、源码同步在github上,欢迎Star,蟹蟹~


机器语言与汇编语言

有些程序设计语言无需借助软件执行,这些语言称为机器语言。机器语言可以由硬件直接解释执行,理论上不必使用软件

机器语言写成的程序本质上是一个位数很长的二进制数字。由于它不易阅读,人们通过汇编语言程序来表述这个巨大的数字。因此,如果要执行汇编语言写成的程序,用户通常需要使用软件将其转换为机器语言,这种软件称为汇编程序(assembler)。汇编程序可以说是一种最基本的语言处理器

解释器与编译器

解释器

解释器根据程序中的算法执行运算。简单地说,它是一种用于执行程序的软件

编译器

编译器能将某种语言写成的程序转换为另一种语言的程序。通常它会将源程序转换为机器语言程序。编译器转换程序的行为称为编译,转换前的程序称为源程序。

有些语言混用解释器与编译器。通常,Java语言首先会通过编译器把源代码转换为Java二进制代码,并将这种虚拟的机器语言保存在文件中。之后,Java虚拟机的解释器将执行这段代码。

大多数Java虚拟机为了提高性能,会在执行过程中通过编译器将一部分Java二进制代码直接转换为机器语言使用。

过去人们题到编译器时,首先会联想到费时的编译过程。不过由于编译后实际执行的是机器语言,因此执行速度很快。而对于解释器,人们通常认为它会在程序输入的同时立即执行,执行速度较慢。这就是两者的基本区别。现代的解释器内部常采用各种类型的编译器,已经越来越没必要将解释器与编译器区分看待

开发语言处理器

由于开发的是脚本语言,所以该处理器属于解释器,不过,该解释器内部将采用编译器来提高性能。

书中将设计的语言命名为Stone语言。实现该语言的开发语言是Java语言。因此,Stone语言也是一种运行于Java虚拟机的语言(它称不上是宝石,顶多算是小石子,因此取名为Stone)

语言处理器的结构

无论是解释器还是编译器,语言处理器前半部分的程序结构都大同小异。如下图所示,源代码首先将进行词法分析,由一长串字符串细分为多个更小的字符串单元。分割后的字符串称为单词。之后处理器将执行语法分析处理,把单词的排列转换为抽象语法树。至此,解释器与编译器的处理方式相同。之后,编译器会把抽象语法树转换为其他语言,而解释器将会一边分析抽象语法树一边执行运算

第一天的思维导图

Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

已有 1 条评论
  1. Capella Capella

    强无敌。。自己造轮子