开发一个简单的解释型编程语言.doc_第1页
开发一个简单的解释型编程语言.doc_第2页
开发一个简单的解释型编程语言.doc_第3页
开发一个简单的解释型编程语言.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东 华 大 学 计 算 机 学 院DongHua University软 件 开 发 任 务 书Training Item 项目名称开发一个简单的解释型编程语言开发人员目的1、掌握综合运用所学知识解决实际问题的能力;2、掌握灵活运用指针和指针数组解决实际问题,从中体会指针对程序设计的作用;3、掌握编程语言的内在机理,提高对各种程序设计语言的理论认识,进而真正掌握C语言;并为下一步学习面向对象语言打下良好的基础;4、初步掌握编译原理的基本原理,以及编译型语言和解释型语言在执行机制上异同,特别是为同学以后自学脚本语言打下良好的理论基础;脚本语言是非常有用的一种开发语言,特别是在大型游戏设计是非常重要的一种编程技术;5、在实战中提高同学的编程能力。一、开发要求1、 用C或Java开发一个简单的解释型编程语言;2、 实现要求:解释器软件从文件或键盘上逐行接收输入的语句,一条语句是一行,所以不需要以“;”作为语句的结束符。解释器根据语句类型执行不同的动作,遇到输入语句则从键盘接收用户输入的一个整数或一串以回车结束的字符串;遇到输出语句则在屏幕上显示指定的变量的值。3、 该编程语言必须支持至少以下功能: 变量声明语句:语法:数据类型 变量名,变量名,数据类型要求至少支持整数和字符串,例如: 整数 学生人数,grade string 学生姓名 赋制值语句: 语法: 变量名=常量变量名变量名=常量变量名 常量变量名变量名=常量变量名 常量变量名变量名=常量变量名 常量变量名变量名=常量变量名 常量变量名 要求:常量是整数或字符串,对于整数支持加、减、乘、除运算,对于字符串则只支持加法运算,必须能检查运算或赋值的两个表达式类型是否一致。例: 学生姓名=”独孤求败”grade=grade*10 输入语句:语法:input 变量名;例: input 学生姓名 输出语句:语法:print 变量名;例: print 学生姓名二、评分方法1、 基本功正确:75分2、 开发报告: 25分 封面 对软件的总体介绍:概要功能介绍、系统的软件结构(数据结构、全局变量、程序主流程等) 各个主要功能模块(不是每个函数,而是独立功能)的流程图,必要时附主要程序段加以说明。 项目报告中说明程序设计过程中的难点、解决办法及编程小结或体会。三、设计指导解释器的实现关键是符号表,符号表实际上一个如下类型的一维数组tokenTable100:struct Token char * pName; /指向某个变量名字符串的保存位置 void * pVal; /指向保存某个变量的值的内存地址,使用时需要强制类型转换 char type; /指示某个变量的数据类型:i-整数;s-字符串 int size; /指示某个变量所占用的内存大小 tokenTable100;程序的主框架结构如下:int nVal;char sVal100; struct Token tokenTable100;void main() memset(tokenTable,0,sizeof(tokenTable); 循环 1、从键盘上读入一串字符保存到s; 2、以空格为分割符从s中截取第一个单词; 3、如果该单词是数据类型关键字,则 循环 以逗号为分割符从剩余的s中截取第一个单词; 以该单词(即变量名)查tokenTable数组,检查该变量名是否与数组中某个元素的pName所指向的字符串相等;是;提示用户变量名重复定义,退出循环;否则,继续3; 在tokenTable数组中寻找一个空的元素,找不到,提示用户系统空间溢出,中断程序;否则,继续4; 根据数据类型将相应的type设置为对应的值; 调用malloc函数为变量名分配保存空间,并将malloc的返回地址保存到pName中,然后调用strcpy函数将变量名保存到malloc分配的内存中; 如果变量是整型数据类型,则用malloc函数为变量分配保存其值的内存空间(sizeof(int)),并将malloc的返回地址保存到pVal中;对于字符串类型,则分配10个字节大小的空间,并将malloc的返回地址保存到pVal中,同时,将tokenTable数组当前元素的size设置为10;4、如果该单词是input关键字,则 以剩余的s为变量名查tokenTable数组,检查该变量名是否与数组中某个元素的pName所指向的字符串相等;否;提示用户未定义的变量名,继续循环;否则,继续2; 根据tokenTable数组中当前元素的type判断该变量是整数吗?是,执行scanf(“%d”,&nVal);否则,scanf(“%s”,sVal); 如果执行的是scanf(“%d”,&nVal)语句,则将nVal复制到tokenTable数组中当前元素的pVal所指向的内存中,退出循环;否则,继续4; 判断sVal的长度是否超过了size,否,将sVal复制到tokenTable数组中当前元素的pVal所指向的内存中,退出循环;否则,继续5; 利用free释放pVal所指向的内存,再利用malloc申请strlen(sVal)+1的内存,返回值保存到pVal;利用strcpy()将sVal的内容复制到pVal所指向的内存中;5、如果该单词是print关键字,则.6、如果该单词是exit关键字,则程序结束.7、用该单词(即变量名)查tokenTable数组,检查该变量名是否与数组中某个元素的pName所指向的字符串相等;否;提示用户未定义变量,继续循环;否则,下一步;如果剩余字符串中没有“+”或“-”,则说明是简单的变量赋值,继续,否则,转 检查剩余字符串是否是以字符开头,是,该字符串首字符是双引号吗,是,说明是以字符串常量为变量赋值,转,否则,转;将两个双引号之间的字符复制到sVal,然后按照inpout语句方法同样处理,继续循环;将剩余字符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论