一.程序基本任务及结构
其编译过程采用一趟扫描方式
以语法、语义分析程序为核心
词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。
表格管理程序实现变量,常量和过程标识符的信息的登录与查找。
出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误 性质有关的编号,并进行错误恢复。
二.PL/0语言基本结构
<程序> :: = <程序首部> <分程序>.
<程序首部> :: = PROGRAM <标识符>;
<分程序> :: = [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句部分>
<常量说明部分> :: = CONST <常量定义>{
,<常量定义> };
<常量定义> :: = <标识符 >= <无符号整数>
<变量说明部分> :: = VAR <标识符>{
,<标识符> };
<过程说明部分> :: = <过程首部>; <分程序>;
<过程首部> :: = PROCEDURE <标识符>//变量定义
<语句部分> :: = <语句> | <复合语句>
<复合语句> :: = BEGIN <语句>{
; <语句> }
<语句>:: = <赋值语句> | <条件语句> | <当型 循环语句> | <过程调用语句> | <读语句> | <写语句> | <复合语句>
<赋值语句> :: = <标识符>: = <表达式>
<读语句> :: = READ(<标识符>{
, <标识符>})
<写语句> :: = WRITE(<表达式>{
, <表达式>})
<过程调用语句> :: = CALL <标识符>
<条件语句> :: = IF <条件> THEN <语句>
<当型循环语句> :: = WHILE <条件> DO <语句>
<因子> :: = <标识符> | <常量> | (<表达式>