编译原理实验
实验二:语法分析
一、实验目的
给出PL/0文法规范,要求编写PL/0语言的语法分析程序。
二、实验准备
微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C++。
三、实验时间
6学时
四、实验内容
已给PL/0语言文法,利用递归子程序法,编制语法分析程序,要求将错误信息输出到语法错误文件中,输出语法树。
PL/0语法如下:
<程序>"<分程序>.
<分程序> "[<常量说明>][<变量说明>][<过程说明>]<语句>
<常量说明> "CONST<常量定义>{,<常量定义>};
<常量定义> "<标识符>=<无符号整数>
<无符号整数> " <数字>{<数字>}
<变量说明> "VAR <标识符>{, <标识符>}
<标识符> "<字母>{<字母>|<数字>}
<过程说明> "<过程首部><分程序>{; <过程说明> }
<过程首部> "PROCEDURE <标识符>;
<语句> "<赋值语句>|<条件语句>|<当循环语句>|<过程语句>
|<复合语句>|<读语句><写语句>
<赋值语句> "<标识符>:=<表达式>
<复合语句> "BEGIN <语句> {;<语句> }END
<条件语句> " <表达式> <关系表达式> <表达式> |ODD<表达式>
<表达式> " [+|-]<项>{<加碱运算符> <项>}
还有10条规则构成了PL/0语言,为此文法写一个语法分析器。
CONST A=10;
VAR B,C;
PROCEDURE Q;
VAR X;
BEGIN
READ(X);
B:=X;
X:=X-1;
END;
BEGIN
WRITE(A);
CALL Q;
END.
(1)PL/0编译程序结构
目标程序
9