PL-0语言的语法描述.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PL/0语言的语法描述 程序语法描述图 ? 分程序语法描述图 语句语法描述 条件语句描述图 表达式语法描述 项语法描述 因子语法描述 1、PL/0语言文法的EBNF(巴克斯-瑙尔范式)表示 〈表达式〉::=[+|-]〈项〉{〈加法运算符〉〈项〉} 〈项〉::=〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉::=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’ 〈加法运算符〉::=+|- 〈乘法运算符〉::=*|/ 〈关系运算符〉::==|#||=||= 〈条件语句〉::=IF〈条件〉THEN〈语句〉 〈过程调用语句〉::=CALL〈标识符〉 〈当型循环语句〉::=WHILE〈条件〉DO〈语句〉 〈读语句〉::=READ‘(’〈标识符〉{,〈标识符〉}‘)’ 〈写语句〉::=WRITE‘(’〈表达式〉{,〈表达式〉}‘)’ 〈字母〉::=a|b|…|X|Y|Z 〈数字〉::=0|1|…|8|9 2、PL/0编译程序的结构 PL/0语言可以看成PASCAL语言的子集,它的编译程序是一个编译解释执行系统。PL/0的目标程序为假想栈式计算机的汇编语言,与具体计算机无关。 PL/0的编译程序和目标程序的解释执行程序都是用PASCAL语言书写的,因此PL/0语言可在配备PASCAL语言的任何机器上实现。 其编译过程采用一趟扫描方式,以语法分析程序为核心,词法分析和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需要生成相应的目标代码时,则调用代码生成程序。 用表格管理程序建立变量、常量和过程表示符的说明与引用之间的信息联系。 用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错位性质。 当源程序编译正确时,PL/0编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序的要求输入数据和输出运行结果。 PL/0语言使用PASCAL语言书写的,整个编译程序(包含主程序)是由18个嵌套机并列的过程或函数组成。 函数功能说明表: ? 过程或函数名 ? 功能简要说明 ? p10 ? 主程序 ? error ? 出错处理,打印出错位置和错误编码 ? getsym ? 词法分析,读取一个单词 ? getch ? 漏掉空格,读取一个字符 ? gen ? 生成目标代码,并送入目标程序区 ? test ? 测试当前单词符是否合法 ? block ? 分析程序处理过程 ? enter ? 登录名字表 ? position(函数) ? 查找标识符在名字表中的位置 ? constdeclaration ? 常量定义处理 ? vardeclaration ? 变量定义处理 ? listcode ? 列出目标代码清单 ? statement ? 语句部分处理 ? expression ? 表达式处理 ? term ? 项处理 ? factor ? 因子处理 ? condition ? 条件处理 ? interpret ? 对目标代码的解释执行程序 ? base(函数) ? 通过静态链求出数据区的基地址 ? 过程或函数的嵌套定义结构 语法分析过程BLOCK是整个编译过程的核心。 编译程序的总体流程如下图: 3、PL/0编译程序的词法分 PL/0的词法分析程序GETSYM是一个独立的过程,其基本功能是为语法分析提供单词,是语法分析的基础,他把输入的字符串形式的源程序分割成一个个单词符号。为此PL/0编译程序设置了三个全程量的公用单元: SYM:存放每个单词的类别,用内部编码形式表示。 ID:存放用户所定义的标识符的值。及标识符字符串的机内表示。 NUM:存放用户定义的数。 单词的种类有五种: 基本字:也称为保留字,如BEGIN,END,IF,THEN等 运算符:如+、-、*、/、:=、#、=、=等。 标识符:用户定义的变量名、常数名、过程名。 常 数:如10,25,100等整数。 界 符:如,、.、;、(、)等 如果把基本字、运算符、界符称为语言固有的单词,而对标识符、常数称为用户定义的单词。那么经词法分析程序分出的单词,对语言固有的单词只给出类别存放在SYM中,而对用户定义的单词既给出类别又给值,其类别放在SYM中,值放在ID或NUM中,全部单词种类由编译程序定义的纯量类型SYMBOL给出。 词法分析程序GETSYM将完成下列任务: (1)空格; (2)识别保留字; (3)识别标识符; (4)拼数; (5)拼复合词,如:=、:=、=等单词; (6)输出源程序 在GETSYM中要调用GETCH,其功能是取字符。其过程框图如下: 说明: CH:存放当前读取的字符,初值为空; LINE:一维数组,其数组元素是字符,界对为1:80。用于读入一行字符的缓冲区; LL

文档评论(0)

***** + 关注
实名认证
文档贡献者

本账号下所有文档分享可拿50%收益 欢迎分享

1亿VIP精品文档

相关文档