PL/0 语言简介
A. PL/0 语言是 Pascal 语言的子集- 数据类型只有整型- 标识符的有效长度是 10 ,以字母开头的字母数字串- 数最多 14 位- 过程无参,可嵌套(最多三层),可递归调用- 变量的作用域同 Pascal ,常量为全局的B. 语句类型:- 赋值语句: if…then…, while…do…, read, write, call- 复合语句: begin …end- 说明语句: const…, var…, procedure…C. 13个保留字:- If/then, while/do, read/write,-  call, begin/end, const, var, procedure, odd

PL/0 程序设计语言是一个较简单的语言,它以赋值语句为基础,构造概念有 顺序、条件和重复(循环)三种。PL/0 有子程序概念,包括过程定义(可以嵌 套)与调用且有局部变量说明。PL/0 中唯一的数据类型是整型,可以用来说明 该类型的常量和变量。当然 PL/0 也具有通常的算术运算和关系运算。

PL/0 文法

PL/0 是一个小巧的高级语言。虽然它只有整数类型,但它是相当完全的可嵌套的分程序(block)的程序结构,分程序中可以有常量定义、变量声明和无参过程声明,过程体又是分程序。PL/0 有赋值语句、条件语句、循环语句、过程调用语句、复合语句和空语句。由于上面这些语言概念已为大家熟知,因此不再进行语义解释。下面用习题 3.7 所介绍的扩展方式来给出 PL/0 语言的文法。

Program → Block Block → [ConstDecl] [VarDecl][ProcDecl] StmtConstDecl → const ConstDef , ConstDef ;ConstDef → ident = numberVarDecl → var ident , ident ;ProcDecl → procedure ident ; Block ; procedure ident ; Block ;Stmt → ident := Exp | call ident | begin Stmt ; Stmt end |if Cond then Stmt | while Cond do Stmt | εCond → odd Exp | Exp RelOp ExpRelOp → = | <> | < | > | <= | >=Exp → [+ | − ] Term + Term | − TermTerm → Factor ∗ Factor | / FactorFactor → ident | number | ( Exp )\begin{aligned} &\text{Program → Block }\\ &\text{Block → [ConstDecl] [VarDecl][ProcDecl] Stmt}\\ &\text{ConstDecl → const ConstDef {, ConstDef} ;}\\ &\text{ConstDef → ident = number}\\ &\text{VarDecl → var ident {, ident} ;}\\ &\text{ProcDecl → procedure ident ; Block ; {procedure ident ; Block ;}}\\ &\text{Stmt → ident := Exp | call ident | begin Stmt {; Stmt} end |}\\ &\text{ if Cond then Stmt | while Cond do Stmt | ε}\\ &\text{Cond → odd Exp | Exp RelOp Exp}\\ &\text{RelOp → = | <> | < | > | <= | >=}\\ &\text{Exp → [+ | − ] Term {+ Term | − Term}}\\ &\text{Term → Factor {∗ Factor | / Factor}}\\ &\text{Factor → ident | number | ( Exp )}\\ &\end{aligned} ​Program → Block Block → [ConstDecl] [VarDecl][ProcDecl] StmtConstDecl → const ConstDef , ConstDef ;ConstDef → ident = numberVarDecl → var ident , ident ;ProcDecl → procedure ident ; Block ; procedure ident ; Block ;Stmt → ident := Exp | call ident | begin Stmt ; Stmt end | if Cond then Stmt | while Cond do Stmt | εCond → odd Exp | Exp RelOp ExpRelOp → = | <> | < | > | <= | >=Exp → [+ | − ] Term + Term | − TermTerm → Factor ∗ Factor | / FactorFactor → ident | number | ( Exp )​

其中的标识符 ident 是字母开头的字母数字串,number 是无符号整数,begin、call、const、do、end、if、odd、procedure、then、var、while 是保留字。用 PL/0 语言写的一个程序如下,它有 3 个过程,分别计算两个整数相乘、相除和求最大公约数。

const m=7, n=85;
var x,y,z,q,r;
procedure multiply;var a,b;begina:=x; b:=y; z:=0;while b>0 dobeginif odd b then z:=z+a;a:=2*a; b:=b/2;endend;
----------------------------------------------
procedure divide;var w;beginr:=x; q:=0; w:=y;while w<=r do w:=2*w;while w>y dobeginq:=2*q; w:=w/2;if w<=r thenbeginr:=r-w;q:=q+1;endendend;
----------------------------------------------
procedure gcd;var f,g;beginf:=x;g:=y;while f<>g dobeginif f<g then g:=g-f;if g<f then f:=f-g;endend;
beginx:=m; y:=n; call multiply;x:=25; y:=3; call divide;x:=34; y:=36; call gcd;
end.


PL/0 语言简介、PL/0 文法相关推荐

  1. PL/0语言编译器扩展 编译原理课程实践(1)

    转眼大学生活就要结束,编译原理课程学的东西很多都忘记了.当时我们编译原理课程实践是PL/0语言编译器扩展,在原有PL/0语言文法进行扩展.我写这次博文一是为了回忆以前学的知识,加深记忆:二是和大家分享 ...

  2. Oracle PL/SQL语言初级教程(自学)

    Oracle PL/SQL语言初级教程 PL/SQL 语言基础 PL/SQL 是一种高性能的基于事务处理的语言,能运行在任何 ORACLE 环境中,支持所有数据处理命令. 通过使用 PL/SQL 程序 ...

  3. 转:PL/0语言词法及语法分析系统的设计与实现

    PL/0语言词法及语法分析系统的设计与实现 作者:陶善文 南京航空航天大学信息与计算机科学专业 下载源代码 摘要:本文介绍了一个PL/0语言的词法及语法分析系统的设计与实现 关键词:循环分支 递归下降 ...

  4. PL/0语言编译程序分析

    PL/0语言是Pascal语言的一个子集,我们这里分析的PL/0的编译程序包括了对PL/0语言源程序进行分析处理.编译生成类PCODE代码,并在虚拟机上解释运行生成的类PCODE代码的功能. PL/0 ...

  5. 第1关:使用C/C++语言编写PL/0编译程序的词法分析程序

    任务描述 使用C/C++语言编写PL/0编译程序的词法分析程序.需要注意的点: (1)识别非法字符:如 @ . & 和 ! 等: (2)识别非法单词:数字开头的数字字母组合: (3)标识符和无 ...

  6. 从0开始学习C语言————C语言简介,数据类型及分支语句

    C语言简介: C语言诞生于1970~1973年,丹尼斯.里奇和肯.汤普逊编写完成的,归属于美国的贝尔实验室 C语言专门为了编写操作系统而诞生的,因此天生适合对硬件编程,也非常适合数据结构和算法的实现, ...

  7. c语言vc6.0界面设计实例,vc6.0使用简介及C语言在6.0平台上的编程实例.ppt

    vc6.0使用简介及C语言在6.0平台上的编程实例 C++ 目录 第一章:Visual C++概述 第二章:C++语言基础 第三章:用MFC编写Windows程序 第四章:消息与输入 第五章:菜单.工 ...

  8. c语言编程基础------0.0c语言介绍

    注明:这篇文章主要内容来源与维基百科 http://zh.wikipedia.org/wiki/C%E8%AF%AD%E8%A8%80#C99 C语言 「 C程序设计语言」重定向至此.關於书籍,詳見「 ...

  9. PL/SQL语言基础

    PL/SQL语言基础 /********************************数据类型*************************************/ %rowtype  (行对 ...

最新文章

  1. ubuntu fctix
  2. 解决方法|ESP8266环境搭建出现 usrbinenv bashr :没有那个文件或目录
  3. 看完这篇还不会kafka,我跪榴莲!
  4. 语言中的petchar运用_自闭症儿童语言障碍家庭训练,需要融入这些方法
  5. 行走在消失中的五种编程语言
  6. (二十五)深度学习目标检测:RCNN
  7. 企业大数据分析平台如何构建
  8. 机器学习算法基础5-线回归与岭回归
  9. 01背包 hihocoder第六周
  10. php oracle 存储过程,用PHP调用Oracle存储过程
  11. navicat使用手册
  12. EDU教育网邮箱申请注册享受Apple、微软、Github等产品教育优惠附带各优惠申请教程
  13. Unity 简单RPG对话系统——龙之谷2的NPC对话系统
  14. 前端面试题集锦——JavaScript
  15. 【转】程序员面试揭秘之程序员靠什么途径去美国工作?
  16. Selenium Chrome设置代理之后验证依旧是本机ip原因
  17. 怎么用计算机弹出行星,宇宙模拟器space engine教程2:创建自定义太阳系,包括创建恒星,行星等(上)...
  18. 程序员写作云笔记推荐
  19. 一、性能测试的八大类
  20. 【故障处理】ORA-12545: Connect failed because target host or object does not exist

热门文章

  1. 使用vue获取富文本编辑器文字内容前50个字符
  2. python写爬虫要记的单词_Python爬虫入门案例:获取百词斩已学单词列表
  3. Beta阶段敏捷冲刺①
  4. 小程序开发效率提升(持续更新)
  5. python3识别简单验证码
  6. css3 动画之 2D旋转 3D旋转 放大
  7. 前端~css~基准线与行高、行距和半行距/圆角矩形~
  8. 全景图下载——chrome插件Pano fetch
  9. 关于 Android O 的 treble/hidl
  10. Acrobat Reader XI启动后自动关闭的分析