PL/0语言编译器源码及测试程序

时间:2015-03-07 12:36:44
【文件属性】:

文件名称:PL/0语言编译器源码及测试程序

文件大小:5KB

文件格式:RAR

更新时间:2015-03-07 12:36:44

PL/0 编译器

在《算法+数据结构=程序》一书中,Niklaus Wirth 设计的 PL/0 语言编译器分成两部分,把源语言翻译成中间语言的编译器和中间语言解释器,编译器用的是递归下降的预测分析方法中间语言是一种栈机器代码,其指令集是根据 PL/0 语言的需要来设计的。编译器源码及测试程序可从。一条指令由三个域组成: (1)操作码 f:上面已经列出了所有 8 种操作码。 (2)层次差 l:这里的层次差就是 5.3.2 节介绍嵌套深度时的 n p − n a 。该域仅用于存取指令和调用指令。 (3)多用途 a:在运算指令中,a 的值用来区分不同的运算;在其他情况,a 或是一个数(lit,int),或是一个程序地址(jmp,jpc,cal),或是一个数据地址(lod,sto)。 编译器对 PL/0 源程序进行一遍扫描,并逐行输出源程序。在源程序无错的情况下,编译器每编译完一个分程序,就列出该分程序的代码,这由编译器的 listcode 过程完成。每个分程序的第一条指令是 jmp 指令,其作用是绕过该分程序声明部分产生的代码(即绕过内嵌过程的代码)。listcode 过程没有列出这条代码。 解释器是编译器中的一个过程,若源程序无错,则编译结束时调用解释过程 interpret。由于 PL/0 语言没有输出语句,解释器按执行次序,每遇到对变量赋值时就输出该值。 由于 PL/0 语言是过程嵌套语言,因此程序运行时,活动记录栈中每个活动记录需要包含控制链和访问。活动记录栈的栈顶以外的存储空间作为代码执行过程中所需要的计算栈,无需另外设立计算栈。


【文件预览】:
tests.pl0
pl0.c
multiply.pl0
pl0.h
multiply.res

网友评论

  • 可以可以 ,gcc7.4 ubuntu18.04下编译通过
  • 挺好的,我感觉这本书挺有用的
  • 感谢分享!
  • 感谢分享.....和我的版本差不多
  • 很好,有帮助
  • 资源很好,代码结构很清晰,缺点是注释较少,且都是英文,对于个别变量、函数的理解带来了很大的困扰!
  • 很好,很有用
  • 对编译器的理解很有帮助!
  • 好多地方的语法 不一样
  • 很好的,编译原理实验可以参考!
  • 不错,可以参考一下
  • 读作业有一定帮助
  • 对学习编译原理帮大忙了
  • 资源不错,帮助很大,谢谢!!
  • 和广工的相同,不过有点差别,总体上来说还算可以
  • 很好,定义的很清楚,很简洁,谢谢
  • 没学过pl0语言,不会用
  • 语法不大一样,不过还是很有帮助,谢谢
  • 好像语法不太一样,pl0变得好多
  • 不错,挺好的代码,正在研究