语法分析和语义分析
由于本项目使用的是递归下降子程序法,对每一个PL/0中的语法成分都进行了分析,并单独编写为一个过程。
函数名 | 功能 |
---|---|
program() | <主程序>::=<分程序>. |
block() | <分程序>::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> |
conDeclare() | <常量说明部分>::=const <常量定义>{,<常量定义>} |
conHandle() | <常量定义>::=<标识符>=<无符号整数> |
varDeclare() | <变量说明部分>::=var<标识符>{,<标识符>} |
proc() | <过程说明部分>::=<过程首部><分程序>{;<过程说明部分>}; <过程首部>::=procedure<标识符>; |
body() | <复合语句>::=begin<语句>{;<语句>}end |
statement() | <语句>::=<赋值语句> or <条件语句> or <当循环语句> or <过程调用语句> or <复合语句> or <读语句> or <写语句> or <空> |
condition() | <条件>::=<表达式><关系运算符><表达式> or odd<表达式> |
expression() | <表达式>::=[+ or -]<项>{<加法运算符><项>} <加法运算符>::=+ or - |
term() | <项>::=<因子>{<乘法运算符><因子>} <乘法运算符>::=* or / |
factor() | <因子>::=<标识符> or <无符号整数> or '('<表达式>')' |
其中每个语法成分的分析按照语法图进行,并同时进行符号表管理及Pcode代码生成。
各个语法的描述图如下: