




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、语言编译系统初探计算机系01本陈海东2004年2月概述该系统是一个简易的32位语言编译系统,可以实现语言程序从编辑修改、编译到连接、运行等一系列过程。能够工作在Windows的各个版本下。必须声明的是:在设计实现这个系统的时候我并未正式接触过编译原理,因此难免会有很多贻笑大方之处主要构成模块编译程序汇编程序连接程序运行库及启动代码工程管理程序集成开发环境系统流程源代码编译汇编代码汇编目标代码源代码编译汇编代码汇编目标代码源代码编译汇编代码汇编目标代码源代码编译汇编代码汇编目标代码运行库连接可执行文件编译程序汇编程序连接程序编译程序编译器是系统的核心部分,用纯面向对象的方法设计,是技术上最难实现
2、的部分。由于本项目的目标只是做编译器的尝试且为了调试方便,因此并未使用低级语言而是采用Visual C+ 6.0来实现。编译器以普通的源代码文件为输入,以32位x86汇编语言代码文件为输出。该编译器实现了一些简单的优化。如常值表达式的化简等。目标代码输出词法分析解释预处理指令源程序编译流程类型/声明分析语句分析表达式分析函数体分析代码生成Token流类型表变量表函数表常量表错误表错误信息输出目标代码错误信息引用信息词法分析将源程序分解为按语言规定的保留字、标识符、数字、符号、字符串等,并处理预编译指令。代码生成进行将输入的单词归约为诸如声明、定义、语句、表达式等实体的尝试,并登记到各相关表中,
3、如果归约失败还将记录出错信息。整个过程采用递归的方式进行逐级的分析。类型表记录由typedef所定义的类型。函数表直接记录目标代码。该编译程序不产生中间代码。常量表记录字符串、浮点常数等无法由x86立即数寻址方式引用的常量。类型表和变量表采用栈结构,这是为了方便表示非全局的类型和变量。引用信息记录了源程序所有引用过的源文件,这些信息将用于工程管理。简单数值类型类型位长取值范围char8-128 +127unsigned char80 255short16-32768 +32767unsigned short160 65535int32-2147483648 +2147483647unsigne
4、d int320 4294967295long64-9223372036854775808 +9223372036854775807unsigned long640 18446744073709551615float321.401298464e-45 3.402823466e+38double644.940656458e-324 1.797693134e+308long double803.362103143e-4932 1.189731495e+4932与标准之间语法的差异函数调用前必须声明。函数、外部变量的声明不能省略基本类型标识。函数参数表如果为空则表示无任何参数。局部变量的定义无须全部
5、写在语句体的开头部分。可以使用+风格的单行注释。汇编程序连接程序这两个部分不是我做的,我只是采用了Borland的TASM和TLINK来充当这两个角色。此外为了生成能够脱离Win32环境的程序,该系统最后还将为目标程序安装一个32位DPMI扩展器,使得程序即使部署在纯DOS环境下依然能够进入处理器保护模式并能访问全部4GB的地址空间。运行库及启动代码运行库包括了很多常用的标准库函数,并全部由该编译系统编译生成。启动代码由纯汇编语言编写,包含目标程序启动时所需的与运行环境相关的初始化代码及基础支持代码(如截获系统中断、高精度计时、64位长整数乘除运算支持等)。工程管理程序(MAKE)这个模块是由
6、该编译系统实现的。它能够逐个检查工程内的每个模块的修改时间,对上次编译后又修改过的模块或新加入的模块进行编译、汇编,最后根据需要进行连接。整个过程都是自动完成的,这使得建造工程变得简单了许多,同时也为我后来的开发工作提供了很大的方便。集成开发环境(IDE)同样是由该编译系统实现,并利用了前面提到的工程管理程序。这是整个系统的主要界面,集成了系统几乎所有的功能。由于语言不直接支持面向对象的程序设计,因此我引用了Windows API中的消息传递机制来模拟面向对象的机制。结束语这个“初探”的系统已经有一定的实用价值了。源程序附有我以前在Turbo C 2.0上写的一个图形演示程序,在这个系统上运行几乎未作什么修改。与TC的版本比较,在该系统上的版本能够并发更多的特效(主要得益于32位的代码并突破了实模式下640KB的内存限制),且由于对高精度计时的支持使得程序运行速率能够更加精确地控制。加上前面的MAKE程序和IDE,都使整个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服装店装修发包合同
- 2025年度养猪场生物安全防控体系建设合同
- 2025年度劳动合同到期解除协议书及离职员工离职证明及离职手续办理指南
- 2025年度建筑劳务施工节能减排合作协议
- 2025年度分红股收益分配与权益变更协议
- 2025年度数据保密审计与保密合同
- 2025年度公司免责的旅游服务合作协议
- 2025年度创业公司股权激励及转让协议
- 2025年网络游戏行业发展现状分析:网络游戏国内用户规模不断扩大
- 岗位晋升申请书
- 脑卒中患者的康复护理查房
- 酶工程技术在茶叶深加工中的应用
- 大模型在教育科技中的应用
- 人教版英语八年级下册全册教案教学设计及教学反思
- 02J401 钢梯【含03年修改】图集
- 烹饪概论教学大纲
- Android移动应用开发基础教程-教案
- 脑梗合并心衰护理查房
- JGT472-2015 钢纤维混凝土
- 第九届鹏程杯五年级数学竞赛初试真题
- 电梯结构与原理-第2版-全套课件
评论
0/150
提交评论