编 译 原 理实验报告 实验名称:预测分析法姓名: 专业班级:计科学号: 指导老师: 日期:2025 年 6 月 1 日目的要求1
构造文法的语法分析程序,要求采纳预测分析法对输入的字符串进行语法分析
加深对预测分析 LL(1)分析法的理解和掌握
实验内容对文法 G 进行语法分析,文法 G 如下所示:*0
S→a */*1
S→^ *2
S→(T) *3
T→SW **4
W→,SW *5
W→ε;并对任给的一个输入串进行语法分析检查
程序要求能对输入串进行预测分析,能判别程序是否符合已知的语法规则,假如不符合(编译出错),则输出错误信息
程序输入/输出示例: 输入: 一个以 # 结束的符号串:例如:(a,a)# 输出: 步数 分析栈 输入串 所用规则 (1) #S (a,a))# 2源程序://LL(1)预测分析控制程序#include #include #include char str[100]; //存储待分析的句子const char T[ ] = "a^(),#"; //终结符,分析表的列符const char NT[ ] = "STW"; //非终结符,分析表的行符/*指向产生式右部符号串*/const char *p[] = {/*0
S→a */ "a",/*1
S→^ */ "^",/*2
S→(T) */"(T)",/*3
T→SW */"SW",/*4
W→,SW */",SW",/*5
W→ε; */""}; //设 M[i][j]=x,通过 p[M[i][j]]=p[x]猎取右部符号串
const int M[][6] = { /* a ^ ( ) , # *//*S*/{ 0, 1, 2, -1, -1, -1 }, /*T*/{ 3, 3, 3, -1, -1, -1 }, /*W*/{ -1, -1,-1, 5,