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

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编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序的要求输入数据和输出运行结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值