X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=token_t.h;h=2f2918d87f7aebf0fc674d2654216228c715b6a5;hb=5894d20a1ca98cb5eb0916b083db5838657d6730;hp=7bdc8d83bbb6885ef8e6aa45cd901ee182fc36ac;hpb=2beaa4f65961fe297663e1cec9e5632b7f3e1cba;p=cparser diff --git a/token_t.h b/token_t.h index 7bdc8d8..2f2918d 100644 --- a/token_t.h +++ b/token_t.h @@ -26,7 +26,7 @@ #include "symbol_table.h" #include "type.h" -typedef enum token_type_t { +typedef enum token_kind_t { T_ERROR = -1, T_NULL = 0, T_EOF = '\x04', // EOT @@ -36,9 +36,9 @@ typedef enum token_type_t { #undef TS #undef T T_LAST_TOKEN -} token_type_t; +} token_kind_t; -typedef enum preprocessor_token_type_t { +typedef enum preprocessor_token_kind_t { TP_NULL = T_NULL, TP_EOF = T_EOF, TP_ERROR = T_ERROR, @@ -48,32 +48,68 @@ typedef enum preprocessor_token_type_t { #undef TS #undef T TP_LAST_TOKEN -} preprocessor_token_type_t; +} preprocessor_token_kind_t; typedef struct source_position_t source_position_t; struct source_position_t { const char *input_name; - unsigned linenr; + unsigned lineno; + unsigned colno; }; /* position used for "builtin" declarations/types */ extern const source_position_t builtin_source_position; -typedef struct { - int type; - symbol_t *symbol; /**< contains identifier. Contains number suffix for numbers */ - string_t literal; /**< string value/literal value */ - source_position_t source_position; -} token_t; +typedef struct token_base_t token_base_t; +typedef struct identifier_t identifier_t; +typedef struct string_literal_t string_literal_t; +typedef struct number_literal_t number_literal_t; +typedef union token_t token_t; + +struct token_base_t { + int kind; + source_position_t source_position; +}; + +struct identifier_t { + token_base_t base; + symbol_t *symbol; +}; + +struct string_literal_t { + token_base_t base; + string_t string; +}; + +struct number_literal_t { + token_base_t base; + string_t number; + string_t suffix; +}; + +union token_t { + int kind; + token_base_t base; + identifier_t identifier; + string_literal_t string; + number_literal_t number; +}; void init_tokens(void); void exit_tokens(void); -void print_token_type(FILE *out, token_type_t token_type); +void print_token_kind(FILE *out, token_kind_t token_kind); void print_token(FILE *out, const token_t *token); -symbol_t *get_token_symbol(const token_t *token); +symbol_t *get_token_kind_symbol(int token_kind); -void print_pp_token_type(FILE *out, int type); +void print_pp_token_kind(FILE *out, int kind); void print_pp_token(FILE *out, const token_t *token); +/** + * returns true if pasting 2 preprocessing tokens next to each other + * without a space in between would generate (an)other preprocessing token(s) + */ +bool tokens_would_paste(preprocessor_token_kind_t token1, + preprocessor_token_kind_t token2); + #endif