summaryrefslogtreecommitdiff
path: root/05/constants.b
diff options
context:
space:
mode:
Diffstat (limited to '05/constants.b')
-rw-r--r--05/constants.b294
1 files changed, 260 insertions, 34 deletions
diff --git a/05/constants.b b/05/constants.b
index 9effeee..370f197 100644
--- a/05/constants.b
+++ b/05/constants.b
@@ -1,37 +1,115 @@
-; #define KEYWORD_AUTO 101 (auto only exists in C for legacy reasons and doesn't appear in TCC's source code)
-#define KEYWORD_DOUBLE 102
-#define KEYWORD_INT 103
-#define KEYWORD_STRUCT 104
-#define KEYWORD_BREAK 105
-#define KEYWORD_ELSE 106
-#define KEYWORD_LONG 107
-#define KEYWORD_SWITCH 108
-#define KEYWORD_CASE 109
-#define KEYWORD_ENUM 110
-#define KEYWORD_REGISTER 111
-#define KEYWORD_TYPEDEF 112
-#define KEYWORD_CHAR 113
-#define KEYWORD_EXTERN 114
-#define KEYWORD_RETURN 115
-#define KEYWORD_UNION 116
-; #define KEYWORD_CONST 117 (we can just #define const)
-#define KEYWORD_FLOAT 118
-#define KEYWORD_SHORT 119
-#define KEYWORD_UNSIGNED 120
-#define KEYWORD_CONTINUE 121
-#define KEYWORD_FOR 122
-; #define KEYWORD_SIGNED 123 (again, just #define signed)
-#define KEYWORD_VOID 124
-#define KEYWORD_DEFAULT 125
-#define KEYWORD_GOTO 126
-#define KEYWORD_SIZEOF 127
-; #define KEYWORD_VOLATILE 128 (just #define volatile if need be)
-#define KEYWORD_DO 129
-#define KEYWORD_IF 130
-#define KEYWORD_STATIC 131
-#define KEYWORD_WHILE 132
+; C OPERATOR PRECEDENCE
+; lowest
+; 1 ,
+; 2 = += -= *= /= %= <<= >>= &= ^= |=
+; 3 ? ... :
+; 4 ||
+; 5 &&
+; 6 |
+; 7 ^
+; 8 &
+; 9 == !=
+; a < > <= >=
+; b << >>
+; c + -
+; d * / %
+; e unary prefixes ++ -- & * + - ~ !
+; f . -> () [] postfix ++ --
+; highest
+; NB: for equal precedence, operators are applied left-to-right except for assignment operators (precedence 2)
-:str_missing_closing_bracket
+; pattern for binary operators is: 0x10px where p is precedence
+; NB: these four can also be unary: & * + -
+#define MASK_SYMBOL_PRECEDENCE 0x0ff0
+#define SYMBOL_COMMA 0x1010
+#define SYMBOL_EQ 0x1020
+#define SYMBOL_PLUS_EQ 0x1021
+#define SYMBOL_MINUS_EQ 0x1022
+#define SYMBOL_TIMES_EQ 0x1023
+#define SYMBOL_DIV_EQ 0x1024
+#define SYMBOL_PERCENT_EQ 0x1025
+#define SYMBOL_LSHIFT_EQ 0x1026
+#define SYMBOL_RSHIFT_EQ 0x1027
+#define SYMBOL_AND_EQ 0x1028
+#define SYMBOL_XOR_EQ 0x1029
+#define SYMBOL_OR_EQ 0x102a
+#define SYMBOL_QUESTION 0x1030
+#define SYMBOL_OR_OR 0x1040
+#define SYMBOL_AND_AND 0x1050
+#define SYMBOL_OR 0x1060
+#define SYMBOL_XOR 0x1070
+#define SYMBOL_AND 0x1080
+#define SYMBOL_EQ_EQ 0x1090
+#define SYMBOL_NOT_EQ 0x1091
+#define SYMBOL_LT 0x10a0
+#define SYMBOL_GT 0x10a1
+#define SYMBOL_LT_EQ 0x10a2
+#define SYMBOL_GT_EQ 0x10a3
+#define SYMBOL_LSHIFT 0x10b0
+#define SYMBOL_RSHIFT 0x10b1
+#define SYMBOL_PLUS 0x10c0
+#define SYMBOL_MINUS 0x10c1
+#define SYMBOL_TIMES 0x10d0
+#define SYMBOL_DIV 0x10d1
+#define SYMBOL_PERCENT 0x10d2
+
+#define SYMBOL_PLUS_PLUS 100
+#define SYMBOL_MINUS_MINUS 101
+#define SYMBOL_NOT 102
+#define SYMBOL_TILDE 103
+#define SYMBOL_ARROW 104
+#define SYMBOL_DOTDOTDOT 105
+#define SYMBOL_COLON 106
+#define SYMBOL_LBRACE 107
+#define SYMBOL_RBRACE 108
+#define SYMBOL_LSQUARE 109
+#define SYMBOL_RSQUARE 110
+#define SYMBOL_LPAREN 111
+#define SYMBOL_RPAREN 112
+#define SYMBOL_SEMICOLON 113
+
+
+#define TOKEN_IDENTIFIER 1
+#define TOKEN_CONSTANT_FLOAT 2
+#define TOKEN_CONSTANT_INT 3
+#define TOKEN_CONSTANT_CHAR 4
+#define TOKEN_STRING 5
+
+
+; #define KEYWORD_AUTO 21 (@NONSTANDARD auto only exists in C for legacy reasons and doesn't appear in TCC's source code)
+#define KEYWORD_DOUBLE 22
+#define KEYWORD_INT 23
+#define KEYWORD_STRUCT 24
+#define KEYWORD_BREAK 25
+#define KEYWORD_ELSE 26
+#define KEYWORD_LONG 27
+#define KEYWORD_SWITCH 28
+#define KEYWORD_CASE 29
+#define KEYWORD_ENUM 30
+; #define KEYWORD_REGISTER 31 (we can just #define register)
+#define KEYWORD_TYPEDEF 32
+#define KEYWORD_CHAR 33
+#define KEYWORD_EXTERN 34
+#define KEYWORD_RETURN 35
+#define KEYWORD_UNION 36
+; #define KEYWORD_CONST 37 (we can just #define const)
+#define KEYWORD_FLOAT 38
+#define KEYWORD_SHORT 39
+#define KEYWORD_UNSIGNED 40
+#define KEYWORD_CONTINUE 41
+#define KEYWORD_FOR 42
+; #define KEYWORD_SIGNED 43 (again, just #define signed)
+#define KEYWORD_VOID 44
+#define KEYWORD_DEFAULT 45
+#define KEYWORD_GOTO 46
+#define KEYWORD_SIZEOF 47
+; #define KEYWORD_VOLATILE 48 (just #define volatile if need be)
+#define KEYWORD_DO 49
+#define KEYWORD_IF 50
+#define KEYWORD_STATIC 51
+#define KEYWORD_WHILE 52
+
+:str_missing_closing_paren
string Missing closing ).
byte 0
:str_comment_start
@@ -76,7 +154,7 @@
:str_div_eq
string /=
byte 0
-:str_remainder_eq
+:str_percent_eq
string %=
byte 0
:str_and_eq
@@ -109,6 +187,78 @@
:str_hash_hash
string ##
byte 0
+:str_eq
+ string =
+ byte 0
+:str_not
+ string !
+ byte 0
+:str_tilde
+ string ~
+ byte 0
+:str_lt
+ string <
+ byte 0
+:str_gt
+ string >
+ byte 0
+:str_and
+ string &
+ byte 0
+:str_or
+ string |
+ byte 0
+:str_xor
+ string ^
+ byte 0
+:str_plus
+ string +
+ byte 0
+:str_minus
+ string -
+ byte 0
+:str_times
+ string *
+ byte 0
+:str_div
+ string /
+ byte 0
+:str_percent
+ string %
+ byte 0
+:str_question
+ string ?
+ byte 0
+:str_comma
+ string ,
+ byte 0
+:str_colon
+ string :
+ byte 0
+:str_semicolon
+ byte 59
+ byte 0
+:str_dot
+ string .
+ byte 0
+:str_lparen
+ string (
+ byte 0
+:str_rparen
+ string )
+ byte 0
+:str_lsquare
+ string [
+ byte 0
+:str_rsquare
+ string ]
+ byte 0
+:str_lbrace
+ string {
+ byte 0
+:str_rbrace
+ string }
+ byte 0
:str_error
string error
byte 0
@@ -145,6 +295,82 @@
:str_endif
string endif
byte 0
+:str_double
+ string double
+ byte 0
+:str_int
+ string int
+ byte 0
+:str_struct
+ string struct
+ byte 0
+:str_break
+ string break
+ byte 0
+:str_long
+ string long
+ byte 0
+:str_switch
+ string switch
+ byte 0
+:str_case
+ string case
+ byte 0
+:str_enum
+ string enum
+ byte 0
+:str_typedef
+ string typedef
+ byte 0
+:str_char
+ string char
+ byte 0
+:str_extern
+ string extern
+ byte 0
+:str_return
+ string return
+ byte 0
+:str_union
+ string union
+ byte 0
+:str_float
+ string float
+ byte 0
+:str_short
+ string short
+ byte 0
+:str_unsigned
+ string unsigned
+ byte 0
+:str_continue
+ string continue
+ byte 0
+:str_for
+ string for
+ byte 0
+:str_void
+ string void
+ byte 0
+:str_default
+ string default
+ byte 0
+:str_goto
+ string goto
+ byte 0
+:str_sizeof
+ string sizeof
+ byte 0
+:str_do
+ string do
+ byte 0
+:str_static
+ string static
+ byte 0
+:str_while
+ string while
+ byte 0
+
:str___FILE__
string __FILE__
byte 0