下载后可任意编辑《编译原理》课程实验报告哈尔滨工程大学软件学院2024 年 5 月实验 2:语法分析一、实验目的1. 巩固对语法分析的基本功能和原理的认识。2. 通过对语法分析表的自动生成加深语法分析表的认识。3. 理解并处理语法分析中的异常和错误。二、实验内容本程序是基于已构建好的某一个语法的预测分析表来对用户的输入字符串进行分析,推断输入的字符串是否属于该文法的句子。基本实现思想:接收用户输入的字符串(字符串以“#”表示结束)后,对用做分析栈的一维数组和存放分析表的二维数组进行初始化。然后取出分析栈的栈顶字符,推断是否为终结符,若为终结符则推断是否为“#”且与当前输入符号一样,若是则语法分析结束,输入的字符串为文法的一个句子,否则出错若不为“且与当前输入符号一样则将栈顶符号出栈,当前输入符号从输入字符串中除去,进入下一个字符的分析。若不为“#”且不与当前输入符号一样,则出错。若栈顶符号为非终结符时,查看预测分析表,看栈顶符号和当前输入符号是否构成产生式,若产生式的右部为 ε,则将栈顶符号出栈,取出栈顶符号进入下一个字符的分析。若不为 ε,将产生式的右部逆序的入栈,取出栈顶符号进入下一步分析。题目 语法分析器的设计与实现专业 软件工程 班级 学号 姓名 指导老师 下载后可任意编辑程序流程图:本程序中使用以下文法作对用户输入的字符串进行分析:E→TE’’→+TE’|εT→FT’T’→*FT’|εF→i|(E)该文法的预测分析表为:代码:package zhuangms.com;import java.io.*;public class LL {String Vn[] = { "E""T", "T'", "F" }; // 非终结符集String Vt[] = { "i", "+", "*", "(", ")", "#" }; // 终结符集String P[][] = new String[5][6]; // 预测分析表String fenxi[] ; // 分析栈int count = 1; // 步骤int count1 = 1;//’分析栈指针int count2 = 0, count3 = 0;//预测分析表指针String inputString = ""; // 输入的字符串下载后可任意编辑boolean flag;public void setCount(int count, int count1, int count2, int count3){this.count = count; this.count1 = count1;this.count2 = count2;this.count3 = count3;flag = false;}public void setFenxi() { // 初始化分析栈fenxi = new String[20];fenxi[0] = "#";fenxi[1] = "E";}public void setP() { //...