#ifndef SW_TOKEN_TYPES #define SW_TOKEN_TYPES typedef TOKEN const short unsigned int typedef struct { TOKEN tk; union { char *string; int integer; float fraction; } value; } SwToken; /* These are the core types, advanced types such as lists/dicts contain these core types (among other things). */ TOKEN SW_TOKEN_STRING_LITERAL = 1; /* using ', ", """, or ''' */ TOKEN SW_TOKEN_INTEGER = 2; /* 0-9+ */ TOKEN SW_TOKEN_FLOAT = 3; /* 0-9.(0-9)* */ TOKEN SW_TOKEN_BOOL_TRUE = 4; /* true */ TOKEN SW_TOKEN_BOOL_FALSE = 5; /* false */ /* Symbols/Identifiers */ TOKEN SW_TOKEN_PROCEDURE = 10; /* => */ TOKEN SW_TOKEN_IDENTIFIER = 11; /* variables, functions, etc. */ /*TOKEN SW_TOKEN_CONSTRUCT_LABEL = 12; /* eg: for, do, map, reduce, etc */ TOKEN SW_TOKEN_RELATE = 12; /* -> */ TOKEN SW_TOKEN_DO = 13; /* do: ... ; */ TOKEN SW_TOKEN_WHILE = 14; /* while cond: ... ; */ TOKEN SW_TOKEN_FOR = 15; /* for ...: ... ; */ TOKEN SW_TOKEN_RETURN = 16; /* return ... */ TOKEN SW_TOKEN_CONT = 17; /* continue */ TOKEN SW_TOKEN_BREAK = 18; /* break */ /* General symbols that can be ambiguous */ TOKEN SW_TOKEN_COLON = 20; /* : */ TOKEN SW_TOKEN_SEMICOLON = 21; /* ; */ TOKEN SW_TOKEN_PERIOD = 22; /* . */ TOKEN SW_TOKEN_COMMA = 23; /* , */ TOKEN SW_TOKEN_SET = 24; /* = */ TOKEN SW_TOKEN_JOIN = 25; /* _ */ TOKEN SW_TOKEN_MORE_ARGS = 26; /* ... */ TOKEN SW_TOKEN_RANGE = 27; /* .. */ /* Operators */ TOKEN SW_TOKEN_NOT = 30; /* ! */ TOKEN SW_TOKEN_IS = 31; /* is */ TOKEN SW_TOKEN_EQUALS = 32; /* == */ TOKEN SW_TOKEN_IN = 33; /* in */ TOKEN SW_TOKEN_NOT_EQUALS = 34; /* != */ TOKEN SW_TOKEN_LOGICAL_AND = 35; /* && */ TOKEN SW_TOKEN_LOGICAL_OR = 36; /* || */ TOKEN SW_TOKEN_LOGICAL_XOR = 37; /* ^^ */ TOKEN SW_TOKEN_LT = 38; /* < */ TOKEN SW_TOKEN_GT = 39; /* > */ TOKEN SW_TOKEN_LT_EQUAL = 40; /* <= */ TOKEN SW_TOKEN_GT_EQUAL = 41; /* >= */ TOKEN SW_TOKEN_ADD = 43; /* + */ TOKEN SW_TOKEN_SUBTRACT = 44; /* - */ TOKEN SW_TOKEN_DIVIDE = 45; /* / */ TOKEN SW_TOKEN_MULTIPLY = 46; /* * */ TOKEN SW_TOKEN_EXPONENT = 47; /* ** */ TOKEN SW_TOKEN_SUBSTITUTE = 48; /* % */ /* Parens/brackets/braces (would be cool if we could have chevrons as well) */ TOKEN SW_TOKEN_PAREN_OPEN = 50; /* ( */ TOKEN SW_TOKEN_PAREN_CLOSE = 51; /* ) */ TOKEN SW_TOKEN_BRACKET_OPEN = 52; /* [ */ TOKEN SW_TOKEN_BRACKET_CLOSE = 53; /* ] */ TOKEN SW_TOKEN_BRACE_OPEN = 54; /* { */ TOKEN SW_TOKEN_BRACE_CLOSE = 55; /* } */ /* Bitwise operators */ TOKEN SW_TOKEN_BIT_OR = 60; /* | */ TOKEN SW_TOKEN_BIT_XOR = 61; /* ^ */ TOKEN SW_TOKEN_BIT_AND = 62; /* & */ TOKEN SW_TOKEN_BIT_LSHIFT = 64; /* << */ TOKEN SW_TOKEN_BIT_RSHIFT = 65; /* >> */ TOKEN SW_TOKEN_BIT_COMPLEMENT = 66; /* ~ */ #endif