123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- #ifndef VIRTUALMATH_TOKEN_H
- #define VIRTUALMATH_TOKEN_H
- #include <__macro.h>
- #define MATHER_NUMBER 0
- #define MATHER_STRING 1
- #define MATHER_VAR 2
- #define MATHER_EOF 3
- #define MATHER_ENTER 4
- #define MATHER_SPACE 5
- #define MATHER_IF 6
- #define MATHER_ELIF 7
- #define MATHER_WHILE 8
- #define MATHER_FOR 9
- #define MATHER_IN 10
- #define MATHER_TRY 11
- #define MATHER_EXCEPT 12
- #define MATHER_AS 13
- #define MATHER_WITH 14
- #define MATHER_DO 15
- #define MATHER_ELSE 16
- #define MATHER_FINALLY 17
- #define MATHER_DEFAULT 18
- #define MATHER_GLOBAL 19
- #define MATHER_NONLOCAL 20
- #define MATHER_PUBLIC 21
- #define MATHER_PROTECT 22
- #define MATHER_PRIVATE 23
- #define MATHER_TRUE 24
- #define MATHER_FALSE 25
- #define MATHER_NULL 26
- #define MATHER_DEF 27
- #define MATHER_CLASS 28
- #define MATHER_BLOCK 29
- #define MATHER_BREAK 30
- #define MATHER_CONTINUE 31
- #define MATHER_REGO 32
- #define MATHER_RESTART 33
- #define MATHER_RETURN 34
- #define MATHER_YIELD 35
- #define MATHER_IMPORT 36
- #define MATHER_INCLUDE 37
- #define MATHER_ADD 38
- #define MATHER_SUB 39
- #define MATHER_MUL 40
- #define MATHER_DIV 41
- #define MATHER_INTDIV 42
- #define MATHER_PER 43
- #define MATHER_POW 44
- #define MATHER_LESS 45
- #define MATHER_LESSEQ 46
- #define MATHER_MORE 47
- #define MATHER_MOREEQ 48
- #define MATHER_EQ 49
- #define MATHER_NOTEQ 50
- #define MATHER_BITAND 51
- #define MATHER_BITOR 52
- #define MATHER_BITXOR 53
- #define MATHER_BITNOT 54
- #define MATHER_BITLEFT 55
- #define MATHER_BITRIGHT 56
- #define MATHER_BOOLAND 57
- #define MATHER_BOOLOR 58
- #define MATHER_BOOLNOT 59
- #define MATHER_ASSIGNMENT 60
- #define MATHER_POINT 61
- #define MATHER_AT 62
- #define MATHER_SVAR 63
- #define MATHER_LP 64
- #define MATHER_RP 65
- #define MATHER_LB 66
- #define MATHER_RB 67
- #define MATHER_LC 68
- #define MATHER_RC 69
- #define MATHER_COMMA 70
- #define MATHER_COLON 71
- #define MATHER_SEMICOLON 72
- #define MATHER_LINK 73
- #define MATHER_RAISE 74
- #define MATHER_FROM 75
- #define MATHER_ASSERT 76
- #define MATHER_LAMBDA 77
- #define MATHER_NOTENTER 78
- #define MATHER_COMMENT 79
- #define MATHER_GOTO 80
- #define MATHER_LABEL 81
- #define MATHER_PASSVALUE 82
- #define MATHER_DEL 83
- #define MATHER_MAX 84
- // 从-6开始是为了避开status的特殊值,尽管这并没有什么影响
- #define COMMAND -6
- #define OPERATION -7
- #define POLYNOMIAL -8
- #define FACTOR -9
- #define BASEVALUE -10
- #define ASSIGNMENT -11
- #define CODE -12
- #define FUNCTION -13
- #define CALLBACK -14
- #define IF_BRANCH -15
- #define WHILE_BRANCH -16
- #define BREAK -17
- #define CONTINUE -18
- #define REGO -19
- #define RETURN -20
- #define RESTART -21
- #define TRY_BRANCH -22
- #define RAISE -23
- #define TUPLE -24
- #define INCLUDE -25
- #define YIELD -26
- #define IMPORT -27
- #define VARCONTROL -28
- #define ASSERT -29
- #define DO_BRANCH -30
- #define WITH_BRANCH -31
- #define GOTO -32
- #define LABEL -33
- #define DECORATION -34
- #define FOR_BRANCH -35
- #define DEL -36
- struct Token{
- int token_type; // 记录token的类型,大于0的数字均为lex匹配器所匹配,小于0的为syntax解析器所匹配
- fline line;
- struct TokenData{
- char *str;
- char *second_str; // 针对123.4j这种形式设定的,其中second_str存储j
- struct Statement *st;
- } data;
- struct Token *next;
- };
- struct TokenStream{
- struct Token *token_list; // 提前存储token的列表
- unsigned size;
- };
- struct TokenMessage{
- struct TokenStream *ts;
- struct LexFile *file;
- struct LexMathers *mathers;
- };
- typedef struct LexFile LexFile;
- typedef struct LexMathers LexMathers;
- typedef struct Token Token;
- typedef struct TokenStream TokenStream;
- typedef struct TokenMessage TokenMessage;
- TokenMessage *makeTokenMessage(char *file_dir);
- void freeTokenMessage(TokenMessage *tm, bool self, bool free_st);
- Token *makeToken(long int line);
- long freeToken(Token *tk, bool free_st);
- Token *makeLexToken(int type, char *str, char *second_str, long int line);
- Token *makeStatementToken(int type, struct Statement *st);
- extern Token *getToken(LexFile *file, LexMathers *mathers);
- void addBackToken(TokenStream *ts, Token *new_tk);
- Token *popNewToken(TokenMessage *tm);
- #endif //VIRTUALMATH_TOKEN_H
|