实验报告
题目:使用具递归功能的高级语言(如 C,PASCAL 等)编制递归下降法的语法分析程序。
实习日期:2006.5.26 指导老师:吴取劲
班 级:计算机 08 班 学号:20039440816 姓 名:全 康
一.目的
通过设计,编制,调试一个典型的语法分析程序,实现对词法分析程序所提供的单词
序列进行语法检查和结构分析。
二.基本思想
通过一种比较具有代表性的语法分析方法----LL(1)分析法进行设计。并对几种常见的语
法结构(如赋值语句)进行分析。能达到如下功能:根据程序设计语言的语法规则,
对词法分析产生的单词序列进行语法检查,凡不合语法者,尽可能指出其出错的位置 ,
原因 ,性质。否则,变换成各类语法范畴。
三.分析
根据待分析符号串的当前输入符号,唯一确定并选用某条规则进行推导,当串中的一个
符号与推导的第一个符号相同时,取第二个符号,进而确定定下一个推导应选的规则 ,
直到推导出被分析的串为止。根据递归下降法的语法分析程序分析思想,首先建立分
析栈 stack,待输入符号串存放在 stack[ ]这个一维数组中,文法规则则存放在 wenfa[
][ ]
二维数组中。用户可以自己输入待分析串以及文法规则,程序在接到信息后,将“ #”
和开始符号“A”放入栈中,待分析符号依次被读入,如果分析栈中的元素与输入串中元
素的一种匹配关系在二维数组 wenfa[ ][ ]中出现,则将规则右部的元素逆推进栈。否
则,出错处理。反复执行,直到读入“#”,说明输入串以完全匹配,分析成功,结束。
四.算法
1. 对于形如 A→Dβ,(D∈VN),且有
Select(A→Dβ)={b1,b2,……,bn}
则 M[A,b]=RE(Dβ)/R,(I=1,2,……,n).
其中”RE(Dβ)/R”表示用 Dβ 的逆串替换 A 后,重读当前符号。
2. 对于 A→aβ,(a∈VT),则令
M[A,a]=RE(β)/C
其中,“RE(β)/C”表示用 β 的逆串替换 a 后,继续读下一个符号。
3. 对于 A→€,且有
Select(A→€)={b1,b2,……,bn}
则 M[A,b]=RE(€)/R,(I=1,2,……,n).
4. 对于所有的 a∈VT,且 a 不出现在任何规则右部的首部,则令 M[a,a]=RE(€)/C.
5. 对于#,令 M[#,#]=succ,表示分析成功并结束,所分析输入串得到识别。
6. 其他情况属于出错,置“error”,在分析表中用空白表示。
评论0