Mercurial > hg > index.cgi
diff lwcc/token.h @ 495:5b8871fd7503
Merged previous lwcc development branch into mainline.
author | William Astle <lost@l-w.ca> |
---|---|
date | Mon, 05 Aug 2019 21:27:09 -0600 |
parents | b08787e5b9f3 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lwcc/token.h Mon Aug 05 21:27:09 2019 -0600 @@ -0,0 +1,132 @@ +/* +lwcc/token.h + +Copyright © 2013 William Astle + +This file is part of LWTOOLS. + +LWTOOLS is free software: you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef token_h_seen___ +#define token_h_seen___ + +#include <stdio.h> + +enum +{ + CPP_NOUNG = -3, + CPP_EOL = -2, + CPP_EOF = -1, +}; + +#define TOK_NONE 0 +#define TOK_EOF 1 +#define TOK_EOL 2 +#define TOK_WSPACE 3 +#define TOK_IDENT 4 +#define TOK_NUMBER 5 +#define TOK_CHAR 6 +#define TOK_ADD 8 +#define TOK_SUB 9 +#define TOK_OPAREN 10 +#define TOK_CPAREN 11 +#define TOK_NE 12 +#define TOK_EQ 13 +#define TOK_LE 14 +#define TOK_LT 15 +#define TOK_GE 16 +#define TOK_GT 17 +#define TOK_BAND 18 +#define TOK_BOR 19 +#define TOK_BNOT 20 +#define TOK_MOD 21 +#define TOK_COMMA 22 +#define TOK_ELLIPSIS 23 +#define TOK_QMARK 24 +#define TOK_COLON 25 +#define TOK_OBRACE 26 +#define TOK_CBRACE 27 +#define TOK_OSQUARE 28 +#define TOK_CSQUARE 29 +#define TOK_COM 30 +#define TOK_EOS 31 +#define TOK_HASH 32 +#define TOK_DBLHASH 33 +#define TOK_XOR 34 +#define TOK_XORASS 35 +#define TOK_STAR 36 +#define TOK_MULASS 37 +#define TOK_DIV 38 +#define TOK_DIVASS 39 +#define TOK_ASS 40 +#define TOK_MODASS 41 +#define TOK_SUBASS 42 +#define TOK_DBLSUB 43 +#define TOK_ADDASS 44 +#define TOK_DBLADD 45 +#define TOK_BWAND 46 +#define TOK_BWANDASS 47 +#define TOK_BWOR 48 +#define TOK_BWORASS 49 +#define TOK_LSH 50 +#define TOK_LSHASS 51 +#define TOK_RSH 52 +#define TOK_RSHASS 53 +#define TOK_DOT 54 +#define TOK_CHR_LIT 55 +#define TOK_STR_LIT 56 +#define TOK_ARROW 57 +#define TOK_ENDEXPAND 58 +#define TOK_ERROR 59 +#define TOK_MAX 60 + +struct token +{ + int ttype; // token type + char *strval; // the token value if relevant + struct token *prev; // previous token in a list + struct token *next; // next token in a list + struct token_list *list;// pointer to head of list descriptor this token is on + int lineno; // line number token came from + int column; // character column token came from + const char *fn; // file name token came from +}; + +struct token_list +{ + struct token *head; // the head of the list + struct token *tail; // the tail of the list +}; + +extern void token_free(struct token *); +extern struct token *token_create(int, char *strval, int, int, const char *); +extern struct token *token_dup(struct token *); +/* add a token to the end of a list */ +extern void token_list_append(struct token_list *, struct token *); +/* add a token to the start of a list */ +extern void token_list_prepend(struct token_list *, struct token *); +/* remove individual token from whatever list it is on */ +extern void token_list_remove(struct token *); +/* replace token with list of tokens specified */ +extern void token_list_insert(struct token_list *, struct token *, struct token *); +/* duplicate a list to a new list pointer */ +extern struct token_list *token_list_dup(struct token_list *); +/* print a token out */ +extern struct token_list *token_list_create(void); +extern void token_list_destroy(struct token_list *); + +extern void token_print(struct token *, FILE *); + +#endif // token_h_seen___