diff options
Diffstat (limited to '05/constants.b')
-rw-r--r-- | 05/constants.b | 389 |
1 files changed, 264 insertions, 125 deletions
diff --git a/05/constants.b b/05/constants.b index 370f197..82da6b2 100644 --- a/05/constants.b +++ b/05/constants.b @@ -18,55 +18,51 @@ ; highest ; NB: for equal precedence, operators are applied left-to-right except for assignment operators (precedence 2) -; 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 SYMBOL_COMMA 200 +#define SYMBOL_EQ 201 +#define SYMBOL_PLUS_EQ 202 +#define SYMBOL_MINUS_EQ 203 +#define SYMBOL_TIMES_EQ 204 +#define SYMBOL_DIV_EQ 205 +#define SYMBOL_PERCENT_EQ 206 +#define SYMBOL_LSHIFT_EQ 207 +#define SYMBOL_RSHIFT_EQ 208 +#define SYMBOL_AND_EQ 209 +#define SYMBOL_XOR_EQ 210 +#define SYMBOL_OR_EQ 211 +#define SYMBOL_QUESTION 212 +#define SYMBOL_OR_OR 213 +#define SYMBOL_AND_AND 214 +#define SYMBOL_OR 215 +#define SYMBOL_XOR 216 +#define SYMBOL_AND 217 +#define SYMBOL_EQ_EQ 218 +#define SYMBOL_NOT_EQ 219 +#define SYMBOL_LT 220 +#define SYMBOL_GT 221 +#define SYMBOL_LT_EQ 222 +#define SYMBOL_GT_EQ 223 +#define SYMBOL_LSHIFT 224 +#define SYMBOL_RSHIFT 225 +#define SYMBOL_PLUS 226 +#define SYMBOL_MINUS 227 +#define SYMBOL_TIMES 228 +#define SYMBOL_DIV 229 +#define SYMBOL_PERCENT 230 +#define SYMBOL_PLUS_PLUS 231 +#define SYMBOL_MINUS_MINUS 232 +#define SYMBOL_NOT 233 +#define SYMBOL_TILDE 234 +#define SYMBOL_ARROW 235 +#define SYMBOL_DOTDOTDOT 236 +#define SYMBOL_COLON 237 +#define SYMBOL_LBRACE 238 +#define SYMBOL_RBRACE 239 +#define SYMBOL_LSQUARE 240 +#define SYMBOL_RSQUARE 241 +#define SYMBOL_LPAREN 242 +#define SYMBOL_RPAREN 243 +#define SYMBOL_SEMICOLON 244 #define TOKEN_IDENTIFIER 1 @@ -109,6 +105,225 @@ #define KEYWORD_STATIC 51 #define KEYWORD_WHILE 52 +:keyword_table + byte SYMBOL_SEMICOLON + byte 59 + byte 0 + byte SYMBOL_EQ + string = + byte 0 + byte SYMBOL_LBRACE + string { + byte 0 + byte SYMBOL_RBRACE + string } + byte 0 + byte SYMBOL_LSQUARE + string [ + byte 0 + byte SYMBOL_RSQUARE + string ] + byte 0 + byte SYMBOL_LPAREN + string ( + byte 0 + byte SYMBOL_RPAREN + string ) + byte 0 + byte SYMBOL_COMMA + string , + byte 0 + byte SYMBOL_PLUS_EQ + string += + byte 0 + byte SYMBOL_MINUS_EQ + string -= + byte 0 + byte SYMBOL_TIMES_EQ + string *= + byte 0 + byte SYMBOL_DIV_EQ + string /= + byte 0 + byte SYMBOL_PERCENT_EQ + string %= + byte 0 + byte SYMBOL_LSHIFT_EQ + string <<= + byte 0 + byte SYMBOL_RSHIFT_EQ + string >>= + byte 0 + byte SYMBOL_AND_EQ + string &= + byte 0 + byte SYMBOL_XOR_EQ + string ^= + byte 0 + byte SYMBOL_OR_EQ + string |= + byte 0 + byte SYMBOL_QUESTION + string ? + byte 0 + byte SYMBOL_OR_OR + string || + byte 0 + byte SYMBOL_AND_AND + string && + byte 0 + byte SYMBOL_OR + string | + byte 0 + byte SYMBOL_XOR + string ^ + byte 0 + byte SYMBOL_AND + string & + byte 0 + byte SYMBOL_EQ_EQ + string == + byte 0 + byte SYMBOL_NOT_EQ + string != + byte 0 + byte SYMBOL_LT + string < + byte 0 + byte SYMBOL_GT + string > + byte 0 + byte SYMBOL_LT_EQ + string <= + byte 0 + byte SYMBOL_GT_EQ + string >= + byte 0 + byte SYMBOL_LSHIFT + string << + byte 0 + byte SYMBOL_RSHIFT + string >> + byte 0 + byte SYMBOL_PLUS + string + + byte 0 + byte SYMBOL_MINUS + string - + byte 0 + byte SYMBOL_TIMES + string * + byte 0 + byte SYMBOL_DIV + string / + byte 0 + byte SYMBOL_PERCENT + string % + byte 0 + byte SYMBOL_PLUS_PLUS + string ++ + byte 0 + byte SYMBOL_MINUS_MINUS + string -- + byte 0 + byte SYMBOL_NOT + string ! + byte 0 + byte SYMBOL_TILDE + string ~ + byte 0 + byte SYMBOL_ARROW + string -> + byte 0 + byte SYMBOL_DOTDOTDOT + string ... + byte 0 + byte SYMBOL_COLON + string : + byte 0 + byte KEYWORD_DOUBLE + string double + byte 0 + byte KEYWORD_INT + string int + byte 0 + byte KEYWORD_STRUCT + string struct + byte 0 + byte KEYWORD_BREAK + string break + byte 0 + byte KEYWORD_ELSE + string else + byte 0 + byte KEYWORD_LONG + string long + byte 0 + byte KEYWORD_SWITCH + string switch + byte 0 + byte KEYWORD_CASE + string case + byte 0 + byte KEYWORD_ENUM + string enum + byte 0 + byte KEYWORD_TYPEDEF + string typedef + byte 0 + byte KEYWORD_CHAR + string char + byte 0 + byte KEYWORD_EXTERN + string extern + byte 0 + byte KEYWORD_RETURN + string return + byte 0 + byte KEYWORD_UNION + string union + byte 0 + byte KEYWORD_FLOAT + string float + byte 0 + byte KEYWORD_SHORT + string short + byte 0 + byte KEYWORD_UNSIGNED + string unsigned + byte 0 + byte KEYWORD_CONTINUE + string continue + byte 0 + byte KEYWORD_FOR + string for + byte 0 + byte KEYWORD_VOID + string void + byte 0 + byte KEYWORD_DEFAULT + string default + byte 0 + byte KEYWORD_GOTO + string goto + byte 0 + byte KEYWORD_SIZEOF + string sizeof + byte 0 + byte KEYWORD_DO + string do + byte 0 + byte KEYWORD_IF + string if + byte 0 + byte KEYWORD_STATIC + string static + byte 0 + byte KEYWORD_WHILE + string while + byte 0 + byte 255 + :str_missing_closing_paren string Missing closing ). byte 0 @@ -295,82 +510,6 @@ :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 |