diff options
Diffstat (limited to 'src/core/token.h')
| -rw-r--r-- | src/core/token.h | 172 |
1 files changed, 26 insertions, 146 deletions
diff --git a/src/core/token.h b/src/core/token.h index 514a02d..8f1ab53 100644 --- a/src/core/token.h +++ b/src/core/token.h @@ -1,14 +1,13 @@ /*:* *: File: ./src/core/token.h - *: A simple interpreter - *: - *: WWW : http://fype.buetow.org - *: AUTHOR : http://paul.buetow.org - *: E-Mail : fype at dev.buetow.org - *: - *: Copyright (c) 2005 - 2009, Dipl.-Inform. (FH) Paul C. Buetow - *: All rights reserved. - *: + *: A simple Fype interpreter + *: + *: WWW: http://fype.buetow.org + *: AUTHOR: http://paul.buetow.org + *: E-Mail: fype at dev.buetow.org + *: + *: The Fype Language; (c) 2005 - 2010 - Dipl.-Inform. (FH) Paul C. Buetow + *: *: Redistribution and use in source and binary forms, with or without modi- *: fication, are permitted provided that the following conditions are met: *: * Redistributions of source code must retain the above copyright @@ -16,20 +15,20 @@ *: * Redistributions in binary form must reproduce the above copyright *: notice, this list of conditions and the following disclaimer in the *: documentation and/or other materials provided with the distribution. - *: * Neither the name of buetow.org nor the names of its contributors may - *: be used to endorse or promote products derived from this software + *: * Neither the name of buetow.org nor the names of its contributors may + *: be used to endorse or promote products derived from this software *: without specific prior written permission. - *: - *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR - *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + *: + *: THIS SOFTWARE IS PROVIDED BY PAUL C. BUETOW AS IS'' AND ANY EXPRESS OR + *: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, - *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + *: DISCLAIMED. IN NO EVENT SHALL PAUL C. BUETOW BE LIABLE FOR ANY DIRECT, + *: INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + *: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + *: SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) *: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + *: STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + *: IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE *: POSSIBILITY OF SUCH DAMAGE. *:*/ @@ -39,157 +38,38 @@ #include "../defines.h" #include "../data/array.h" -#define IS_TERMINAL(t) (START_TERMINALS < t && t < END_TERMINALS) -#define IS_NOT_TERMINAL(t) !IS_TERMINAL(t) -#define IS_TYPE(t) (START_TYPES < t && t < END_TYPES) -#define IS_NOT_TYPE(t) !IS_TYPE(t) -#define IS_KEYWORD(t) (START_KEYWORDS < t && t < END_KEYWORDS) -#define IS_NOT_KEYWORD(t) !IS_KEYWORD(t) -#define IS_OPERATOR(t) (START_OPERATORS < t && t < END_OPERATORS) -#define IS_NOT_OPERATOR(t) !IS_OPERATOR(t) -#define IS_NON_TERMINAL(t) (START_NON_TERMINALS < t && t < END_NON_TERMINALS) -#define IS_NOT_NON_TERMINAL(t) !IS_NON_TERMINAL(t) -#define IS_IDENT(t) (t == TT_IDENT) -#define IS_NOT_IDENT(t) !(IS_IDENT(t)) -#define IS_ASSIGNABLE(t) (START_ASSIGNABLES < t && t < END_ASSIGNABLES) -#define IS_NUMERICAL(t) (START_NUMERICAL < t && t < END_NUMERICAL) -#define IS_NOT_NUMERICAL(t) !(IS_NUMERICAL(t)) - -#define token_get_filename(t) \ - (t->c_filename != NULL ? t->c_filename : "Code string") -#define token_get_line_nr(t) t->i_line_nr -#define token_get_pos_nr(t) t->i_pos_nr -#define token_get_tt(t) (t ? t->tt_cur : TT_NONE) -#define token_get_val(t) t->c_val -#define token_get_ival(t) t->i_val -#define token_get_dval(t) t->d_val -#define token_set_tt(t,tt) t->tt_cur = tt -#define token_set_val(t,c) t->c_val = c -#define token_set_ival(t,i) t->i_val = i -#define token_set_dval(t,d) t->d_val = d -#define token_set_pos(t, l, p) t->i_line_nr = l; t->i_pos_nr = p -#define token_get_posnr(t) t->i_pos_nr -#define token_get_linenr(t) t->i_line_nr -#define token_ref_up(t) ++t->i_ref_count -#define token_ref_down(t) --t->i_ref_count -#define TOKEN_GET_ARRAY(t) t->p_array - typedef enum { - // Diverse - TT_NONE, - TT_END_OF_CODE, - TT_BOOL, // Temporaly disabled, maybe NUMERICAL in future again - - // Diverse types - START_TERMINALS, - START_TYPES, - START_ASSIGNABLES, - START_NUMERICAL, - TT_INTEGER, - TT_DOUBLE, - END_NUMERICAL, - TT_STRING, - TT_ARRAY, - END_ASSIGNABLES, TT_IDENT, - END_TYPES, - - // Keywords - START_KEYWORDS, - TT_ELSE, - TT_BREAK, - TT_IF, - TT_IFNOT, - TT_RET, - TT_CONST, - TT_PROC, - TT_FUNC, - TT_MY, - TT_ARR, - TT_WHILE, - TT_UNTIL, - TT_NEXT, - TT_INT, - TT_DEFINED, - TT_UNDEF, - TT_SYMS, - END_KEYWORDS, - - START_PARANTS, - TT_PARANT_CL, - TT_PARANT_CR, - TT_PARANT_AL, - TT_PARANT_AR, TT_PARANT_L, TT_PARANT_R, - END_PARANTS, - - // Operators - START_OPERATORS, - TT_ADD, - TT_AND, - TT_AAND, - TT_ASSIGN, - TT_COMMA, - TT_DDOT, - TT_DECR, - TT_DIV, - TT_DOT, - TT_EQ, - TT_GE, - TT_GT, - TT_INCR, - TT_LE, - TT_LSHIFT, - TT_LT, - TT_MULT, - TT_NEQ, - TT_NOT, - TT_NOTEQ, - TT_OR, - TT_RE, - TT_RSHIFT, - TT_SEMICOLON, - TT_SUB, - TT_VID, - TT_XOR, - END_OPERATORS, - - END_TERMINALS, - + TT_INTEGER, + TT_DOUBLE, + TT_STRING, + TT_SQUOTE, + TT_DOT } TokenType; typedef struct { TokenType tt_cur; char *c_val; - int i_val; - double d_val; int i_line_nr; int i_pos_nr; char *c_filename; unsigned int u_token_id; - int i_ref_count; - Array *p_array; } Token; Token* token_new(char *c_val, TokenType tt_cur, int i_line_nr, int i_pos_nr, char *c_filename); -Token* token_new_integer(int i_val); -Token* token_new_couble(double d_val); -Token* token_new_string(char *c_val); -Token* token_new_array(int i_size); -Token* token_new_copy(Token *p_token); -Token* token_new_(char *c_val, TokenType tt_cur, char *c_filename); Token* token_new_dummy(); -void token_copy_vals(Token *p_token_to, Token *p_token_from); void token_delete(Token *p_token); void token_delete_cb(void *p_token); -void token_ref_down_cb(void *p_token); void* token_copy_cb(void *p_token); char* tt_get_name(TokenType tt_cur); void token_print_cb(void *p_void); void token_print(Token *p_token); +void token_print_ln(Token *p_token); void token_print_val(Token *p_token); +_Bool token_is(Token *p_token, char *c_str); TokenType get_tt(char *c_token); #endif |
