添加项目文件。

This commit is contained in:
KiriAky
2025-07-01 16:04:35 +08:00
parent 27b960a881
commit 0f8e7d3282
13 changed files with 755 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
#ifndef TOKEN_H
#define TOKEN_H
#include<string>
using namespace std;
//<2F>Ǻ<EFBFBD><C7BA><EFBFBD><EFBFBD><EFBFBD>
enum class TokenType {
Number,
Operator,
LeftParen,
RightParen,
Function,
Variable
};
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum class Associativity {
Left,
Right,
None
};
//Token<65><EFBFBD><E1B9B9>
struct Token {
TokenType type;//<2F>Ǻ<EFBFBD><C7BA><EFBFBD><EFBFBD><EFBFBD>
string value; //ʵ<><CAB5><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
int precedence = -1; //<2F><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>Ч
Associativity associativity = Associativity::None; //<2F><><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>Ч
//<2F><><EFBFBD><EFBFBD><ECBAAF>
Token(TokenType t, const string& v,
int p = -1, Associativity assoc = Associativity::None)
:type(t), value(v), precedence(p), associativity(assoc) {}
//<2F><><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD>
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD> "3.14", "42"<22><>
bool is_num() const { return type == TokenType::Number; }
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "+", "-", "*", "/"<22><>
bool is_ope() const { return type == TokenType::Operator; }
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "sin", "cos", "log"<22><>
bool is_fun() const { return type == TokenType::Function; }
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "("<22><><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
bool is_LP() const { return type == TokenType::LeftParen; }
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ")"<22><><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool is_RP() const { return type == TokenType::RightParen; }
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "x", "y"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ֧<D5B9>ַ<EFBFBD><D6B7>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
bool is_var()const { return type == TokenType::Variable; }
};
#endif