plo

(计算机编程语言)

语音

编辑

锁定

讨论

上传视频

本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

PL0语言是一种类PASCAL语言,是教学用程序设计语言,它比PASCAL语言简单,作了一些限制。PL0的程序结构比较完全,赋值语句作为基本结构,构造概念有顺序执行、条件执行和重复执行,分别由BEGIN/END、IF和WHILE语句表示。

中文名

plo

关系运算符

条件语句文法规则

::=

包    含

唯一的整型

语    言

类PASCAL

ploplo简介

编辑

语音

此外,PL0还具有子程序概念,包括过程说明和过程调用语句。在数据类型方面,PL0只包含唯一的整型,可以说明这种类型的常量和变量。运算符有+,-,*,/,=,<>,,<=,>=,(,)。说明部分包括常量说明、变量说明和过程说明。

plo文法规则

编辑

语音

::=. ::=[;]{;} ::=const{,} ::== ::={} ::=var{} ::={|} ::=

::=procedure

::=|

::=begin{;}end

::=||||

||| ::=:= ::=|odd ::=[+|-]|

::=|

::=||()

::=

::=+|-

::=*|/

::=|<>|>=|<=|=

::=ifthen

::=call

::=whiledo

::=read({,})

::=write({,})

::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

plo设计思想

编辑

语音

编译程序的设计可以采用自顶向下和自底向上两种不同的方法。由于许多高级语言(如PASCAL,C)中的语法成分都是递归定义的,PL0也是如此,所以本实验采用递归子程序法,这是一种自顶向下的的编译方法,其基本思想是对源程序的每个(或若干个)语法成分编制一个处理子程序,从处理这个语法成分的子程序开始,在分析过程中调用一系列过程或函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止。

我们给出用PASCAL语言编写的PL0的编译程序,要求学生先读懂它,然后再用自己熟悉的高级语言改写它,能力强的同学可以按照所学知识,自行设计实现方案。

plo编译程序的功能

编辑

语音

(1)语法分析 对由PL/0语言编制的程序作语法分析,确定是否属于PL/0语言,同时揭示出程序的内在结构。

(2)语法错误检查 根据PL/0语言的文法规则设置检测手段,通过查错子程序和一些查错语句,报告源程序出错位置、性质等,直至整个程序结束为止。 (3)生成目标代码 PL/0语言的目标代码是建立在一个假想的处理机上,此处理机称为PL/0处理机。 (4)执行目标代码 PL/0处理机是一种假想的处理机,其目标代码不能在实际的机器上执行,故此编译程序设置了一个子程序,它对PL/0语言的目标代码逐条解释执行,最后得出所需结果。

plo过程及函数

编辑

语音

在PL/0语言的编译文本中,除了常量和变量说明外,共有18个相互嵌套或并列的过程(或函数)。现对这些过程和函数作扼要说明。

(1)error(n):其功能是报告PL/0源程序的出错信息。n为错误类型号,共可查出36种错误。

(2)getsym:词法分析子程序。其功能为读单词。

getch:读字符子程序。它嵌套于读单词子程序中。

(3)gen(x,y,z),伪代码生成子程序。其功能是根据不同的x、y、z生成不同的伪代码。x表示指令码,y表示层差,z表示位移量或数。

(4)test(sl,s2,n):查错子程序。其功能是检测源程序中的语法错误。s1为可允许的下一个符号的集合。如当前符号不在此集合内,立即得到了一个错误。s2为另加的停止符号集,这些符号的出现虽然无疑是错的,但是它们绝不应被忽略而跳过。n表示错误的类型号。

(5)block(1ev,tx,fsys):分程序处理模块。其功能为对分程序进行处理。lev表示层差,tx表示标识符表的下标,fsys是符号集,表示可能出现的符号。

分程序处理模块是整个编译程序的核心,它包含以下的过程和函数。

①enter(k):其功能是造符号表table。k表示符号的类型,其取值范围是(constant, variable,proceable),即此子程序对常量、变量和过程造符号表table,以备检查标识符是否说明过。

②position(id):其功能是查符号表,它是一个函数。 id是所检查的标识符,若查到则给出标识符id在标识符表中的位置,否则给0。

③constdeclaration:常量造表子程序。其功能是为常量造一张常量表,内填常量名、常量值。它通过调用子程序enter(k)完成,此时k=constant。

④vardeclaration:变量造表子程序。其功能是为变量造一张变量表,内填变量名、所处层号。它也是通过调用子程序enter(k)来完成的,此时k=variable。

⑤listcode,打印(伪)代码子程序。其功能是输出生成的目标代码。

⑥statement(fsys):语句处理子程序。其功能是处理语句,它是递归调用的核心部分。其递归调用顺序如下:

expression(fsys):处理算术表达式子程序;

term(fsys):处理项子程序;

condition(fsys):处理因子子程序。

(6)interpret,执行目标代码子程序。其功能是对编译过程中生成的目标代码(伪代码)逐条解释执行。

base(l):提供计算静态链信息子程序。它为过程调用提供调用所需的基地址。

整个PL/0编译程序通过主程序调用分程序处理模块block,再通过block递归调用上述的子程序,达到对PL/0语言的程序进行编译的目的。

plo编译步骤

编辑

语音

程序中用数组word存贮PL/0语言的所有保留字。保留字有begin、call、const、do、end、if、odd、procedure、read、then、var、while、write;

用数组swym存贮保留字所对应的符号表symbol中的符号;

用数组ssym存贮关系运算符及特殊符号+、-、*、/、(、)、=、,、及;所对应的符号表symbol中的符号;

用数组mnemonic存贮目标代码的指令码部分。

其具体步骤如下:

①在主程序中给出编译程序所需的初始值。置字符字数cc、行长ll、代码分配下标cx、错误个数err等为0。调getsym读单词;

②调block模块,进入分程序处理;

③判断所读单词是否为常量说明符号constsym,是则转4),否则转5)。

④读单词并作常量说明处理;查所读单词是否为“,”,是则重复本步;否则判断此单词是否为“;”,是则读单词,否则给出出错信息。进行下一步;

⑤所读单词是否为变量说明符号variable,是则读单词并作变量说明处理,再读单词并判断是否为“,”,是则重复本步;否则判断此单词是否为“;”,是则读单词,否则给出出错信息。进行下一步;

⑥cxl:=cx,并生成jmp 0,0指令,判断所读单词是否为过程说明符号proceduresym,是则读单词转7),否则转11);

⑦判断所读单词是否为标识符,是则转8),否则给出出错信息再进行下一步;

⑧标识符填表,再读单词。判断所读单词是否为“;”,是则读单词,否则给出出错信息。进行下一步;

⑨递归调用分程序处理子程序block;

⑩最近所读单词是否为“;”,是则继续读一单词,否则给出出错信息。转6);

⑾code[cxl].a:=cx,生成分配局部变量指令,语句处理,生成opr 0,0指令;

⑿返回主程序,err是否为0,是则调子程序interpret,转13),否则给出出错信息,结束编译;

⒀解释执行生成的目标代码,列出结果

plo编程注意事项

编辑

语音

PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。

PL/0的编译程序和目标程序的解释执行程序都是用PASCAL语言书写的,因此PL/0语言可在配备PASCAL语言的任何机器上实现 。其编译过程采用一趟扫描方式,以语法分析程序为核心,词法分析和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需要生成相应的目标代码时,则调用代码生成程序。

用表格管理程序建立变量、常量和过程表示符的说明与引用之间的信息联系。

当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序的要求输入数据和输出运行结果。

计算机语言中block,plo(计算机编程语言)_百度百科相关推荐

  1. 为什么放弃治疗_百度百科

    为什么放弃治疗_百度百科 为什么放弃治疗

  2. 弗拉明戈舞_百度百科

    弗拉明戈舞_百度百科 弗拉明戈舞     编辑     弗拉明戈舞简介"弗拉明戈"不仅是歌(cante).舞(baile)和吉他音乐(toque)的三合一艺术,也代表着一种慷慨.狂 ...

  3. QS世界大学排名_百度百科

    QS世界大学排名_百度百科 莱斯特大学

  4. 你若安好便是晴天_百度百科

    你若安好便是晴天_百度百科 你若安好便是晴天 这是一个多义词,请在下列义项中选择浏览 1.人物传记2.杨钰莹原唱歌曲3.蝴蝶季言情小说 林徽因,一代风华的绝世佳人,才华横溢倾倒众生:让徐志摩.梁思成. ...

  5. 九头身美女_百度百科

    九头身美女_百度百科 九头身美女

  6. 讷于言而敏于行_百度百科

    讷于言而敏于行_百度百科 讷于言而敏于行编辑

  7. 探索者系列_百度百科

    探索者系列_百度百科 探索者系列

  8. 牛黄上清片_百度百科

    牛黄上清片_百度百科 牛黄上清片 用法用量 口服.一次4片,一日2次. 2注意事项 1.忌食辛辣食物. 2.孕妇慎用. 3.不宜在服药期间同时服用温补性中成药. 4.有心律失常.心脏病.肝病.肾病等慢 ...

  9. 大葱炒鸡蛋_百度百科

    大葱炒鸡蛋_百度百科 大葱炒鸡蛋

  10. 我本将心向明月,奈何明月照沟渠_百度百科

    我本将心向明月,奈何明月照沟渠_百度百科 我本将心向明月,奈何明月照沟渠

最新文章

  1. php文件数组,从文件到数组php
  2. 解开一个困扰自己多时的小问题
  3. python爬虫需要调用什么模块_python爬虫需要调用什么模块
  4. hdu 5615 Jam's math problem(判断是否能合并多项式)
  5. Redis总结(四)Redis 的持久化
  6. android 如何 root权限获取,如何获取android手机root权限获取
  7. linux gpio信号量,执行完? OSIntExit(); 后,再进行任务调度,可是那两个任务都是在等待信号量啊,难道执行完中断函数后会释放一个信号量吗?...
  8. asp.net core系列 37 WebAPI 使用OpenAPI (swagger)中间件
  9. 小白一枚。。。记录下这种构造函数
  10. Java 常用正则表达式搜集ing
  11. 子网掩码最简单通俗的解释
  12. win10 如何更换即将过期的产品密钥
  13. window出现msvcp100.dll缺失问题
  14. luogu4234 最小差值生成树
  15. JAVA基础---函数式接口、Stream流
  16. 为什么要研发vin码识别?
  17. dsp28335杂记1
  18. GPA计算 UESTC - 152
  19. Fuchsia编译系统的GN结构
  20. 于博士Cadence教程内容目录

热门文章

  1. Python量化交易学习笔记(51)——程序化交易2
  2. 基于Arch的live系统
  3. 计算机操作系统--缺页中断与越界中断
  4. No All Pattern Found!File Already Patched?
  5. 服务器如何修改vt,如何设置VT?
  6. 接口测试+自动化接口测试详解入门到精通
  7. 论文阅读博客||很多论文阅读笔记
  8. python导入excel加入折线图_Python openpyxl 插入折线图实例
  9. 网站安全检测及安全工具
  10. VS2019打包exe文件