直接输入根据已知文法构造的分析表M,对于输入的文法和符号串,所编制的语法分析程序应能正确判断此串是否为文法的句子,并要求输出分析过程。
C++实现如下:
#include<bits/stdc++.h>
using namespace std;
const int L_NUM=100000;
const int MAX=100; //预测分析表容量
const string ERROR="出错! 该文法无法识别该语言!";
string str[MAX][MAX]; //预测分析表
int gone=0; //代表步骤
char any[MAX]; //分析栈
int top=-1; //分析栈指针
queue<char> s; //保存输入串的队列
int n; //非终结符个数
int t; //终结符个数
map<char,int> row; //分析表行号映射
map<char,int> col; //分析表列号映射
map<char,int>::iterator rit; //访问行映射的迭代器
map<char,int>::iterator cit; //访问列映射的迭代器
void terror(); //出错处理
void anysit(); //语法分析
void inputx(); //输入函数
void outputx(); //输出函数
char c0; //保存开始符号
char c; //暂存终结符或非终结符
string s0; //暂存产生式/输入串
int main(){
inputx();
anysit();
return 0;
}
void terror(){
cout<<ERROR<<endl;
}
void inputx(){
cout<<&#