2024年5月25日发(作者:)

语法分析

一、

实验目的

编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分

析。

二、

实验要求

利用C语言编制递归下降分析程序,并对简单语言进行语法分析。

2.1 待分析的简单语言的语法

用扩充的BNF表示如下:

⑴<程序>::=begin<语句串>end

⑵<语句串>::=<语句>{;<语句>}

⑶<语句>::=<赋值语句>

⑷<赋值语句>::=ID:=<表达式>

⑸<表达式>::=<项>{+<项> | -<项>}

⑹<项>::=<因子>{*<因子> | /<因子>

⑺<因子>::=ID | NUM | (<表达式>)

2.2 实验要求说明

输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,

否则输出“error”。

例如:

输入 begin a:=9; x:=2*3; b:=a+x end #

输出 success!

输入 x:=a+b*c end #

输出 error

2.3 语法分析程序的酸法思想

(1)主程序示意图如图2-1所示。

置初值

调用scaner读下一个单词符号

调用lrparser

结束

图2-1 语法分析主程序示意图

(2)递归下降分析程序示意图如图2-2所示。

(3)语句串分析过程示意图如图2-3所示。

是否

begin?

调用scaner

调用statement函数

调用语句串分析程序

调用scaner

是否end?

调用statement函数

调用scaner

出错处理

syn=0&&kk=0?

图2-3 语句串分析示意图

出错处理

打印分析成功

图2-2 递归下降分析程序示意图

(4)statement语句分析程序流程如图2-4、2-5、2-6、2-7所示。

调用term函数

是否标识符?

是否+ , -?

调用scaner

否 是

是否:=?

调用scaner

调用scaner

调用term函数

调用expression函数 出错处理

出错处理

是否 ;?