代码易懂,无需注释就能看懂。
#include<iostream>
#include<unordered_map>
#include<vector>
#include<fstream>
#include<sstream>
#include<unordered_set>
#include<map>
#include<iomanip>
using namespace std;
class OutPut{
public:
OutPut(string step,string symbolStack,string inputString,string production,string action):
step(std::move(step)),symbolStack(std::move(symbolStack)),inputString(std::move(inputString)),
production(std::move(production)),action(std::move(action)){
};
void run(){
cout << setiosflags(ios::left) << setw(14) << step << setiosflags(ios::left) << setw(14) << symbolStack
<< setiosflags(ios::left) << setw(14) << inputString<< setiosflags(ios::left) << setw(14) << production
<< setiosflags(ios::left) << setw(14) << action<<endl;
}
private:
string step,symbolStack,inputString,production,action;
};
class LL1Analyzer{
public:
explicit LL1Analyzer(const string& path){
startchar='$';
ifstream readFile(path);
string grammar;
while(!readFile.eof()){
getline(readFile,grammar,'\n');
stringstream