📄 yffxq.cpp
字号:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include "Stack.h"
#include "LLTable.h"
#include "createT.h"
#define ERROR 0
using namespace std;
int main()
{
Stack ST;
Table lltable;
lltable.Init();
First_Follow FF;
FF.createTable(lltable);
string strToken;
cout<<"请输入要分析的符号串(以#结束): ";
cin>>strToken;
int i = 0;
char a,X;
string x = "";
string M;
bool flag = true;
ST.Push('#');
ST.Push('E');
a = strToken[0];
while( flag )
{
ST.Seeing();
ST.Pop(X);//栈顶出栈
if( (X > 'a' && X < 'z') || X == '+' || X == '*' || X == '(' || X == ')' )
{ //X属于Vt
if( X == a ) // X = a
{
i++;
a = strToken[i];
}
else
{
cout<<"ERROR"<<endl;
return ERROR;
}
}
else if( X == '#' )
{
if( X == a)
flag = false;
else
{
cout<<"ERROR"<<endl;
return ERROR;
}
}
else
{
x = "";
if(X == '\'')
{
ST.Pop(X);//X='\''时将'前的字符出栈
x += X;
x += '\'';
}
else
x += X;
M = lltable.find(x,a);//找到X1X2...Xk
if( M == "ERROR" )
{
cout<<"ERROR"<<endl;
return ERROR;
}
else
{
if( M[M.length()-1] != '$' )//将Xk,Xk-1,....X1依次压入栈
{
char ch;
int n = M.length()-1;
ch = M[n];
while( ch != '>')//一直到'>'前
{
if( ch == '\'')
{
n--;
ch = M[n];
ST.Push( ch );
ST.Push( '\'');
}
else
ST.Push( ch );
n--;
ch = M[n];
}
}
else
continue;
}
}
}
cout<<"Success!"<<endl;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -