实验__ 三 _ ________ 手工构造预测语法分析程序 ____________
一. 实验目的及要求
了解预测分析器的基本构成,掌握自顶向下的预测语法分析程序的手工构造方法。
1、判断上述文法 G[S]是否 LL(1)文法,若不是,将其转变为 LL(1)文法;
2、对转变后的 LL(1)文法建立预测分析表;
3、根据清华大学出版、吕映之等编著的《编译原理》教材教材第五章 Page 88 的图
5.11 手工构造预测分析程序;
4、用预测分析程序对键盘输入串 m+m*m#进行语法分析,并根据栈的变化状态输
出给定串的具体分析过程。
二. 实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附
页)
核心代码:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define HADFOUND 100
#define MAXS 100
int NONE[MAXS];//标记是否存在左递归
string strings;//产生式
string Vn;//非终结符
string Vt;//终结符
string first[MAXS];// 用于存放每个终结符的 first 集
string First[MAXS];// 用于存放每个非终结符的 first 集
string Follow[MAXS]; // 用于存放每个非终结符的 follow 集
string Select[MAXS]; // 用于存放每个产生式的 select 集
string AnalyseTable[10][10];//预测分析表
int AnalyseTableIndex[10][10];
char str[100]; //存储输入串
int N;//产生式个数
string lineName;
string copyVn;
string copyVt;
struct STR
{
string left;
string right;
};