pascal java 编译器_(基于Java)编写编译器和解释器-第1章:介绍(连载)

本章描述了本书的目标和用到的方法并鸟瞰编译器和解释器的全貌。

目标和方法

本书讲授编译器和解释器的基本写法,目标是呈现给你怎样设计和开发它们: 用Java写的编译器,编译Pascal(一个高级的面向过程的编程语言)的一个主要子集。(即包含主要的语言特征,但去掉一些为写编译器方便而去掉的无关大雅的特性)。

用Java写的解释器且包含一个交互式的符号调试器(符号调试器即基于符号表,而不是基于机器的指令集、硬件的调试功能),解释同样的Pascal语言子集。

带图形用户界面的集成开发环境(IDE)。这个IDE是你看到的功能全面的开源的Eclipse或者Borland的JBuilder等IDE的一个简化版。不过,它也包含一个源程序编辑器和一个交互界面用来设置断点,单步调试,查看和修改变量值等等其它。

达成这些个极具野心的目标是个大挑战。好的技能将会帮你如何如把程序编译成为机器语言或解释执行程序。现代软件工程法则和优秀的面向对象设计思想将会给你呈现怎么通过代码实现一个编译器或解释器而最终所有组件能良好协作。编译器和解释器程序大且复杂。开发个小程序仅需要某种技能即可,然NB的程序如编译器或解释器还需要软件工程法则和面向对象设计。因此本书强调必备技能,软件工程法则和面向对象思想。

什么是编译器和解释器

编译器和解释器的主要目的是“翻译”由高阶(High-Level)源语言写的源程序。把源程序翻译成什么样是接下几个段落的主题。

本书中源语言为Pascal的一个大子集,换句话说,你能够编译或解释正规的Pascal程序。因为编译器和解释器是用Java写的,实现语言是Java。

Pascal编译器将Pascal源程序翻译成为低阶(Low-Level)的某具体机器的机器语言(更准确的讲是CPU的机器语言)。通常源程序是文本格式。如果编译器工作正常,对应的机器语言和最初的Pascal源程序殊路同归(一样的行为,只不过呈现方式不一样。比如你用钥匙而偷车的直接电线打火发动汽车一样)。机器语言是目标语言,编译器生成用机器语言组成目标代码。代码生成之后,编译器任务就算完成。目标代码一般写到文件里(一般是二进制文件)。

一个程序可包含数个源文件,而编译器为每个文件生成一个目标文件。一个名叫“链接器”(linker)的辅助程序将这些目标文件的内容连同运行时库程序合成到一个计算机能够加载和执行的目标程序(如windows的PE程序)中。库程序一般来自于预先编译好的目标文件。

因为机器语言不好记,编译器可生成汇编语言作为目标语言,汇编语言离机器语言只有一步之遥。通常每个汇编指令都有机器语言的指令与之对应。如果你掌握了短助记名(比如ADD和MOV等)汇编语言好记多了。汇编器(另一个编译器)将汇编语言翻译成为机器语言。

图1-1 概括了将一个或多个源程序编译成为目标程序的过程。

f30ba2e15af4531e0bfe1dfe6ca7b626.png

图左边展示了将一个包含三个源文件sort1.pas、sort2.pas、sort3.pas的Pa

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值