资源下载地址:https://download.csdn.net/download/sheziqiong/85949206
资源下载地址:https://download.csdn.net/download/sheziqiong/85949206
语法分析的设计方法和实现原理;LL(1)文法及其判定;无回朔的递归下降分析的设计与实现;
二、 目标任务[实验项目]完成以下描述赋值语句的 LL(1)文法的递归下降分析程序
G[S]: S→V=E
E→TE′
E′→ATE′|ε
T→FT′
T′→MFT′|ε
F→ (E)|i
A→+|-
M→*|/
V→i
设计说明]终结符号 i 为用户定义的简单变量,即标识符的定义。
设计要求(1)输入串应是词法分析的输出二元式序列,即某算术表达式“专题 1”的输出结果,输出为输入串是否为该文法定义的算术表达式的判断结果;
(2)递归下降分析程序应能发现简单的语法错误;
(3)设计两个测试用例(尽可能完备,正确和出错),并给出测试结果;
(4)选做:如有可能,考虑如何用文法描述 C 语言的 if 语句,使整个文法仍然为 LL(1)文法,并使得你的递归下降程序可以分析赋值语句和 if 语句。
任务分析重点解决 LL(1)文法到递归子程序框图的设计。
实验原理分析递归下降法的主要原理是,对每个非终结符按其产生式结构构造相应语法分析子程序,其中终结符产生匹配命令,而非终结符则产生过程调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程序下降法或递归下降法。
递归下降分析程序的实现思想是:识别程序由一组子程序组成。每个子程序对应于一个非终结符号。每一个子程序的功能是:选择正确的右部,扫描完相应的字。在右部中有非终结符号时,调用该非终结符号对应的子程序来完成。
程序功能描述1、将二元式序列文件作为程序的输入;
2、对输入的字符串做出正确的递归下降分析判断,判断其是否是给定文法的算术表达式;
3、能发现简单的错误,例如非法字符输入和合法输入但其中某处推导中出现的语法错误等;
程序结构描述程序的主要数据结构如下图,使用 token 存储输入的字符串,current 存当前一个字符,S 到 V 函数分别对应文法中的产生式,error1 函数用来提醒语法错误,error 函数用来提醒非法输入错误。
单词符号及其分类编码
单词符号 种别码
=1
(2
)3
+4
-5
6
/7
i8
#9
程序执行流程如下图所示:
部分子程序流程图如下:
测试用例 1:
i=i+i*i
输入二元组文件如下:
测试结果如下:
可以看到,i=i+i*i 是该文法定义的算术表达式,判断结果是正确。
测试用例 2:
i=i+i/
输入二元组文件如下:
测试结果如下:
可以看到,i=i+i/不是该文法定义的算术表达式,判断结果是错误,并且给出了推导过程中的错误之处,即 F 作为产生式左边时的推导产生了错误,为语法错误,没有未定义符号的出现。
(测试用例见附件 input1,input2)
资源下载地址:https://download.csdn.net/download/sheziqiong/85949206
资源下载地址:https://download.csdn.net/download/sheziqiong/85949206



