2024年5月11日发(作者:)

#include

#include

#include

#include

#include

#include

#include

#include

#define END "$"

#define COL 11

#define ROW 20

#define ACCEPT "ac"

#define PI 3.1415926

#define CHANGSHU_a "a"

#define CHANGSHU_n "n"

#define CHANGSHU_e "e"

using namespace std;

class Token

{

public:

typedef double Value;

typedef string Property;

string name;

Value sync;

Property property;

Token():sync(0.0){}

Token(const string &s):name(s),property(s),sync(0.0) {}

Token(const char* s):name(s),property(s),sync(0.0) {}

friend bool operator ==(const Token& t1,const Token& t2);

};

bool operator ==(const Token& t1,const Token& t2)

{

return ==;

}

class LRpda//定义LL语法分析下推自动机

{

typedef vector Engender;//定义产生式

typedef int State;

typedef string Action;

typedef struct eexpr//定义表达式

{

Token uToken;

Engender engender;

}eExpr;

public:

LRpda();

bool Caculate(const string& exprtmp);//执行PDA

bool Derivative(const string& exprtmp);

private:

bool in_propertys(Token::Property pro,vector &pVec);

bool is_unTerminateToken(const Token& token);//判断是否为非终结符

bool is_TerminateToken(const Token& token);//判断是否为终结符

bool is_delim(char ch);

bool is_operator(char ch);

bool is_letter(char ch);

bool is_num(const string& str);

bool is_num(const Token& token) {}

bool is_id(const string& str);

bool is_changshu(const string &str);

double get_digit(char *&exprtmp);

string get_operator(char *&exprtmp);

void MatrixToFile(const char* filename);

void get_propertys(const char* str,vector &pVec);

Token::Property get_property(const string& str);

void addExpr(const Token& token,const Engender& engender);//添加产生式

void addExpr(const Token& token,const string& engender);

void showMatrix();//打印LL语法分析表

void printExpr(const eExpr& expr);

Token operate(const Token& t1,const Token& op,const Token& t2);

Token operate(const Token& op,const Token& t1);

string der_operate(const string& op,const string& t1);

string LRpda::der_operate(const Token& t1,const string& d1,const string& op,const

Token& t2,const string& d2);

Action ACTION(const State state,const Token& ttoken);//返回 LL语法分析表中行为

uToken,列为tToken中的元素

Action GOTO(const State state,const Token& utoken);