一个微型语言的编译和解释程序.doc_第1页
一个微型语言的编译和解释程序.doc_第2页
一个微型语言的编译和解释程序.doc_第3页
全文预览已结束

下载本文档

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

文档简介

实验三:PL/My语言的编译和解释程序一、实验目的给出PL/M文法规范和目标机指令结构,要求设计PL/M语言的编译程序和解释程序。二、实验准备微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C+。三、实验时间 13学时四、实验内容(1)已给PL/M语言文法,设计递归下降分析程序,并在适当位置插入语义动作,生成目标机指令。(2)利用栈,对生成的目标指令进行解释。 五文档要求同前。附录一:PL/M机器的机器指令 LOD a 栈指针增1。装入a的值到栈顶。 STO a 存栈顶到a。栈指针减1。 LIT n 栈指针增1。 装入数n到栈顶。 ADD 栈顶两个元素相加。弹出这两个元素。存结果在栈顶。 MUL 栈顶两个元素相乘。弹出这两个元素。存结果在栈顶。 这些指令以源码形式由解释程序执行。有关 编译程序/解释程序设计的简单说明存储区采用数组形式,变量按照说明的先后顺序分配存储单元。解释程序利用运行栈进行,所有运算都在栈顶(和次栈顶)进行。编译程序从源程序生成目标代码。解释程序基于前面描述的存储管理方法执行目标代码。变量说明 array x: 保存用户程序 m: 储存用户定义的变量 s: 运行栈 code: 存储目标代码 adr: 用作操作数。如果操作数是变量,存的是地址。如果操作数是数,存的是数值。函数说明 Error( ): 出错处理程序 init( ):初始读入用户程序的一行到数组x。 id( ) 给出变量的地址 getsym( ) 读入下一符号到变量current. S( ) 处理语句。在处理完赋值号左边后,如果下一符号是“=”,读入下一符号,然后处理表达式。 E( ) 处理表达式。在处理好一个项(term)后,当下一符号是“+”,读入下一符号,然后处理项。 T( ) 处理项。在处理好一个因子(factor)后,当下一符号是“”,读入下一符号,然后处理因子。 F( ) 处理因子。(1)如果当前符号是“(“,读入下一符号,处理表达式。此后,如果当前符号是“)”, 读入下一符号,退出。 (2)如果当前符号是变量,读入下个符号,退出。 (3)如果都不是,出错 error( ). Interpret( ) 执行用户的目标代码。变量“i”作为指令计数器。 就是执行 codei for i=1, ., j-1.附录二:微型语言 PL/M定义如下:Program程序的语法图: 这个语言只允许赋值语句序列,每个赋值语句后跟“;”,整个程序由“!”结束。如下是例子程序 a=2;b=3;c=4;a=(b+c)*a;b=a*(c+b);!说明:赋值2给a。赋值3给b。赋值4给c。存(b+c)*a的值到a.PL/M程序文本PS ;P | S;!

温馨提示

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

评论

0/150

提交评论