PL/0语言编译系统

528 阅读1分钟

PL/0语言编译系统是世界著名计算机科学家N.Wirth编写的,它由编译程序解释程序两部分组成。PL/0编译程序的源语言为PL/0,目标语言是一个类P-code的代码。 下文主要通过PL/0编译系统的C语言版本进行举例。

PL/0语言编译系统构成

PL/0语言编译系统由编译程序解释程序两部分组成,分别称为PL/0编译程序类P-code解释程序

image.png

对PL/0编译程序和类P-code解释程序进行联编,就可以生成目标平台上可执行的PL/0语言编译系统。用高级语言实现的类P-code虚拟机是平台无关的,因此PL/0语言编译系统可方便地移植到任何目标平台

PL/0编译程序T形图描述

image.png

类P-code语言是PL/0的编译程序的目标程序,可以看作是类P-code虚拟机的汇编语言。类P-code虚拟机是一种简单的纯栈式结构的机器,它有一个栈式存储器,有4个控制寄存器:指令寄存器i、指令地址寄存器p、栈顶寄存器t和基地址寄存器b,类P-code程序运行期间的数据存储和算术以及逻辑运算都在栈顶进行。

PL/0语言

扩展巴克斯范式(EBNF)

构成EBNF的元素:

非终结符,终结符,开始符,规则

EBNF 的元符号:

元符号说明
<>括号内为非终结符
∷=‘定义为’
‘定义为’
|‘或’
{}括号中内容可重复任意次或限定次数
[]括号中内容为任选项
()括号中内容具有优先级

PL/0语言语法的EBNF描述

image.png image.png

通过上表的EBNF描述可以观察到: PL_0 分程序 (1).png

PL/0语言的单词

PL/0的单词可分为5个大类:保留字、运算符、标识符、无符号整数、界符

image.png

类P-code语言(留坑)

……

PL/0编译程序

PL/0编译程序采用单遍扫描方式的编译过程,由词法分析程序、语法语义分析程序以及代码生成程序3个独立的过程组成。

image.png

PL/0编译程序以语法语义分析程序为核心,当语法分析需要读单词时就调用词法分析程序,而当语法语义分析正确需生成相应语言成分的目标代码时,就调用代码生成程序。
当源程序编译有错时,PL/0编译程序用出错处理程序对词法和语法语义分析遇到的错误给出在源程序中出错的位置和错误性质。
当源程序编译正确时,编译程序正常结束,可输出相应的类P-code目标程序。

PL/0语言编译系统的驱动代码(留坑)

-> main()函数

参考资料

  1. 《编译原理(第三版)》 张素琴 王生原 董渊 吕映芝 蒋维杜著
  2. PL/0语言的语法描述