编译原理 实验二 递归下降语法分析程序

语法分析

实验目的:

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

实验要求:

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

1.带分析的简单语言的语法

用扩充的BNF表示如下:

(1)<程序>::=begin<语句串> end

(2)<语句串>::=<语句>{;<语句>}

(3)<语句>::=<赋值语句>

(4)<赋值语句>::=ID:=<表达式>

(5)<表达式>::=<项>{+<项>|-<项>}

(6)<项>::=<因子>{*<因子>|/<因子>}

(7)<因子>::=ID | NUM | {<表达式>}

2.实验要求说明

在本实验中,输入单词串,以“#”结束,如果输入的每一行都没有错误,则输出“Success”,如果某一行出错,打印出“第X行,XXX错误”,并且在分析完毕之后打印出总共输入的行数,以及错误的个数。

特别注意,要有对应的出错恢复处理功能,即判断某一行出错之后,要能跳过该错误,继续执行程序,而不是马上退出。

实验思想:

在实验中,采取每次读取一行单词串判断,出现第一个错误后报错,跳到下一行继续判断。

本实验采用的是从文本读取程序并且和分析结果一同显示在控制台上,在代码文件中放置了两个txt文档,一个是出错的程序(error_data.txt),一个是正确的程序(right_data.txt),通过在代码的main函数中设置读取的文件名,就可以读取到相关的文件了。

在error_data.txt中基本上囊括了所有错误,两个文件分别读取之后的结果如下:

读取error_data.txt,如下:

a:=4

do:=5;

b=7;

c:=a*((a+b)));

d:=(a+((a*(b+c))

#

预期结果:开始处:缺少‘begin’

          第1行:缺少分隔符

          第2行:变量名错误

          第3行:赋值号错误

          第4行:缺少左括号

          第5行:缺少右括号

          第6行:缺少‘end’

          总共6行,其中有7个错误

读取right_data.txt,如下:

begin

a:=4;

e:=5;

b:=7;

c:=a*(a+b);

d:=(a+(a*(b+c)))

end#

预期结果:Success

          总共7行,其中0个错误


以下附上该程序代码链接:https://download.csdn.net/download/just_a_new_life/10532688

你可能感兴趣的:(编译原理,学习笔记)