编译原理实验作业,建立在文法已给出的基础上的语法分析代码
// 0525.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
#include<string>
#include<vector>
#include<map>
#include<cstring>
#include<stack>
#include<iomanip>
using namespace std;
void initMap();
void initTable();
void judegEle();
void printTable();
void printAnalyze();
bool analyze(string str);
/*
用于完成终结符和非终结符到其index的映射转换
*/
map<char, int>getnum;
/*
用于存储产生式,index为产生式的编号
省略了中间的"->",用R代表E',Y代表T'
便于二维int数组存储预测分析表
*/
string proce[9] = { " ","ETR","R+TR","R@","TFY","Y@","T*FY","Fi","F(E)" };
/*
用于获取终结符和非终结符的编号
*/
char getterm[15];
int table[6][7];
void initMap() {
getnum[' '] = 0;
getterm[0] = ' ';
getnum['i'] = 1;
getterm[1] = 'i';
getnum['+'] = 2;
getterm[2] = '+';
getnum['*'] = 3;
getterm[3] = '*';
getnum['('] = 4;
getterm[4] = '(';
getnum[')'] = 5;
getterm[5] = ')';
getnum['#'] = 6;
getterm[6] = '#';
getnum['E'] = 7;
getterm[7] = 'E';
getnum['R'] = 8;
getterm[8] = 'R';
getnum['T'] = 9;