-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathc_lang.c
More file actions
97 lines (96 loc) · 8.78 KB
/
c_lang.c
File metadata and controls
97 lines (96 loc) · 8.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "c_lang.h"
#include "token.h"
#include "parser.h"
struct TokenStruct_s token_structs[] = {
{UNKNOWN, UNKNOWN_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, NULL, "UNKNOWN"},
{LEFT_BRACE, BRACE_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "{", "LEFT BRACE"},
{RIGHT_BRACE, BRACE_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "}", "RIGHT BRACE"},
{LEFT_PAREN, BRACE_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "(", "LEFT PAREN"},
{RIGHT_PAREN, BRACE_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, -1, 0, 0, ")", "RIGHT PAREN"},
{LEFT_SQUARE, BRACE_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "[", "LEFT SQUARE"},
{RIGHT_SQUARE, BRACE_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "]", "RIGHT SQUARE"},
{SEMICOLON, SEMICOLON_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, -1, 0, 0, ";", "SEMICOLON"},
{AUTO_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "auto", "AUTO"},
{BREAK_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "break", "BREAK"},
{CASE_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "case", "CASE"},
{CHAR_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "char", "CHAR"},
{CONST_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "const", "CONST"},
{CONTINUE_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "continue", "CONTINUE"},
{DEFAULT_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "default", "DEFAULT"},
{DO_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "do", "DO"},
{DOUBLE_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "double", "DOUBLE"},
{ELSE_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "else", "ELSE"},
{ENUM_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "enum", "ENUM"},
{EXTERN_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "extern", "EXTERN"},
{FLOAT_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "float", "FLOAT"},
{FOR_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "for", "FOR"},
{GOTO_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "goto", "GOTO"},
{IF_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "if", "IF"},
{INLINE_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "inline", "INLINE"},
{INT_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "int", "INT"},
{LONG_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "long", "LONG"},
{REGISTER_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "register", "REGISTER"},
{RESTRICT_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "restrict", "RESTRICT"},
{RETURN_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "return", "RETURN"},
{SHORT_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "short", "SHORT"},
{SIGNED_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "signed", "SIGNED"},
{SIZEOF_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "sizeof", "SIZEOF"},
{STATIC_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "static", "STATIC"},
{STRUCT_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "struct", "STRUCT"},
{SWITCH_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "switch", "SWITCH"},
{TYPEDEF_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "typedef", "TYPEDEF"},
{UNION_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "union", "UNION"},
{UNSIGNED_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "unsigned", "UNSIGNED"},
{VOID_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "void", "VOID"},
{VOLATILE_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 1, 0, 0, 0, "volatile", "VOLATILE"},
{WHILE_TOK, KEYWORD_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "while", "WHILE"},
{IDENTIFIER, IDENTIFIER_ST, VAR_EXP, UNKNOWN_EXP, 0, 0, 0, 0, "", "IDENTIFIER"},
{CHAR_LITERAL, LITERAL_ST, CHAR_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "CHAR LITERAL"},
{INT_LITERAL, LITERAL_ST, INT_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "INT LITERAL"},
{HEX_LITERAL, LITERAL_ST, INT_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "HEX LITERAL"},
{OCT_LITERAL, LITERAL_ST, INT_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "OCT LITERAL"},
{UINT_LITERAL, LITERAL_ST, UINT_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "UINT LITERAL"},
{LONG_LITERAL, LITERAL_ST, LONG_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "LONG LITERAL"},
{ULONG_LITERAL, LITERAL_ST, ULONG_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "ULONG LITERAL"},
{LONGLONG_LITERAL, LITERAL_ST, LONGLONG_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "LONGLONG LITERAL"},
{ULONGLONG_LITERAL, LITERAL_ST, ULONGLONG_VALUE, UNKNOWN_EXP, 0, 0, 0, 0, "", "ULONGLONG LITERAL"},
{LOGICAL_NOT, OPERATOR_ST, LOG_NOT, UNKNOWN_EXP, 0, 0, 0, 0, "!", "NOT"},
{BITWISE_NOT, OPERATOR_ST, BITWISE_COMP,UNKNOWN_EXP, 0, 0, 0, 0, "~", "BITNOT"},
{MINUS, OPERATOR_ST, NEGATE, SUB_BINEXP, 0, 12, 0, 0, "-", "MINUS"},
{PLUS, OPERATOR_ST, UNKNOWN_EXP, ADD_BINEXP, 0, 12, 0, 0, "+", "PLUS"},
{STAR, OPERATOR_ST, UNKNOWN_EXP, MUL_BINEXP, 0, 13, 0, 0, "*", "TIMES"},
{SLASH, OPERATOR_ST, UNKNOWN_EXP, DIV_BINEXP, 0, 13, 0, 0, "/", "DIV"},
{EQUAL, OPERATOR_ST, UNKNOWN_EXP, EQ_BINEXP, 0, 9, 0, 0, "==", "EQUALS"},
{NOTEQUAL, OPERATOR_ST, UNKNOWN_EXP, NEQ_BINEXP, 0, 9, 0, 0, "!=", "NOT EQUAL"},
{AND, OPERATOR_ST, UNKNOWN_EXP, AND_BINEXP, 0, 5, 0, 0, "&&", "AND"},
{OR, OPERATOR_ST, UNKNOWN_EXP, OR_BINEXP, 0, 4, 0, 0, "||", "OR"},
{LESSTHAN, OPERATOR_ST, UNKNOWN_EXP, LT_BINEXP, 0, 10, 0, 0, "<", "LESS THAN"},
{LEQ, OPERATOR_ST, UNKNOWN_EXP, LEQ_BINEXP, 0, 10, 0, 0, "<=", "LT or EQUAL"},
{GREATERTHAN, OPERATOR_ST, UNKNOWN_EXP, GT_BINEXP, 0, 10, 0, 0, ">", "GREATER THAN"},
{GEQ, OPERATOR_ST, UNKNOWN_EXP, GEQ_BINEXP, 0, 10, 0, 0, ">=", "GT or EQUAL"},
{MOD, OPERATOR_ST, UNKNOWN_EXP, MOD_BINEXP, 0, 13, 0, 0, "%", "MOD"},
{BIT_AND, OPERATOR_ST, UNKNOWN_EXP, BITAND_BINEXP, 0, 8, 0, 0, "&", "BIT AND"},
{BIT_OR, OPERATOR_ST, UNKNOWN_EXP, BITOR_BINEXP, 0, 6, 0, 0, "|", "BIT OR"},
{BIT_XOR, OPERATOR_ST, UNKNOWN_EXP, BITXOR_BINEXP, 0, 7, 0, 0, "^", "BIT XOR"},
{LSHIFT, OPERATOR_ST, UNKNOWN_EXP, LSHIFT_BINEXP, 0, 11, 0, 0, "<<", "LSHIFT"},
{RSHIFT, OPERATOR_ST, UNKNOWN_EXP, RSHIFT_BINEXP, 0, 11, 0, 0, ">>", "RSHIFT"},
{ASSIGN, OPERATOR_ST, UNKNOWN_EXP, ASSIGN_EXP, 0, 2, 1, 1, "=", "ASSIGN"},
{PLUSEQ, OPERATOR_ST, UNKNOWN_EXP, PLUSEQ_EXP, 0, 2, 1, 1, "+=", "PLUS EQUAL"},
{MINUSEQ, OPERATOR_ST, UNKNOWN_EXP, MINUSEQ_EXP, 0, 2, 1, 1, "-=", "MINUS EQUAL"},
{TIMESEQ, OPERATOR_ST, UNKNOWN_EXP, TIMESEQ_EXP, 0, 2, 1, 1, "*=", "TIMES EQUAL"},
{DIVEQ, OPERATOR_ST, UNKNOWN_EXP, DIVEQ_EXP, 0, 2, 1, 1, "/=", "DIV EQUAL"},
{MODEQ, OPERATOR_ST, UNKNOWN_EXP, MODEQ_EXP, 0, 2, 1, 1, "%=", "MOD EQUAL"},
{LSHEQ, OPERATOR_ST, UNKNOWN_EXP, LSHEQ_EXP, 0, 2, 1, 1, "<<=", "LSHIFT EQUAL"},
{RSHEQ, OPERATOR_ST, UNKNOWN_EXP, RSHEQ_EXP, 0, 2, 1, 1, ">>=", "RSHIFT EQUAL"},
{ANDEQ, OPERATOR_ST, UNKNOWN_EXP, ANDEQ_EXP, 0, 2, 1, 1, "&=", "AND EQUAL"},
{OREQ, OPERATOR_ST, UNKNOWN_EXP, OREQ_EXP, 0, 2, 1, 1, "|=", "OR EQUAL"},
{XOREQ, OPERATOR_ST, UNKNOWN_EXP, XOREQ_EXP, 0, 2, 1, 1, "^=", "XOR EQUAL"},
{COMMA, OPERATOR_ST, UNKNOWN_EXP, COMMA_EXP, 0, 1, 0, 0, ",", "COMMA"},
{PLUSPLUS, OPERATOR_ST, PREINC_EXP, UNKNOWN_EXP, 0, 14, 0, 0, "++", "PLUSPLUS"},
{MINUSMINUS, OPERATOR_ST, PREDEC_EXP, UNKNOWN_EXP, 0, 14, 0, 0, "--", "MINUSMINUS"},
{QMARK, OPERATOR_ST, UNKNOWN_EXP, COND_EXP, 0, 3, 1, 0, "?", "QMARK"},
{COLON, OPERATOR_ST, UNKNOWN_EXP, COND_EXP, 0, 3, 0, 0, ":", "COLON"},
{DOT, OPERATOR_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 14, 0, 0, ".", "DOT"},
{ARROW, OPERATOR_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 14, 0, 0, "->", "ARROW"},
{UNKNOWN, UNKNOWN_ST, UNKNOWN_EXP, UNKNOWN_EXP, 0, 0, 0, 0, 0, 0}
};