diff options
| author | Paul Buetow <paul@buetow.org> | 2008-09-16 17:05:51 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-09-16 17:05:51 +0000 |
| commit | 71185ab0ab0b08b4d5bb2e750ff85e11f105a453 (patch) | |
| tree | a6ad933176f92b60d2f1560d2f1bac46ec6b9566 /src/core/interpret.c | |
| parent | 8b31b18a43dea55489e70d5b2ea6fc183cc67533 (diff) | |
array progress
Diffstat (limited to 'src/core/interpret.c')
| -rw-r--r-- | src/core/interpret.c | 65 |
1 files changed, 48 insertions, 17 deletions
diff --git a/src/core/interpret.c b/src/core/interpret.c index 5aa07ef..c3f781c 100644 --- a/src/core/interpret.c +++ b/src/core/interpret.c @@ -54,15 +54,16 @@ #define _NEXT_TT _next_tt(p_interpret) #define _SKIP _next(p_interpret); -void _print_lookahead(Interpret *p_interpret); +int __expression_get(Interpret *p_interpret, List *p_list_block); +int __array_get(Interpret *p_interpret, Token *p_token_arr); +void __print_lookahead(Interpret *p_interpret); int _next(Interpret *p_interpret); int _program(Interpret *p_interpret); int _var_decl(Interpret *p_interpret); int _var_assign(Interpret *p_interpret); int _var_list(Interpret *p_interpret); -int _expression_get(Interpret *p_interpret, List *p_list_block); int _block_get(Interpret *p_interpret, List *p_list_block); -int _block_skip(Interpret *p_interpret); +int __block_skip(Interpret *p_interpret); int _proc_decl(Interpret *p_interpret); int _func_decl(Interpret *p_interpret); int _statement(Interpret *p_interpret); @@ -114,7 +115,7 @@ interpret_delete(Interpret *p_interpret) { } void -_print_lookahead(Interpret *p_interpret) { +__print_lookahead(Interpret *p_interpret) { ListIterator *p_iter = p_interpret->p_iter; ListIteratorState *p_state = listiterator_get_state(p_iter); @@ -175,7 +176,6 @@ _var_decl(Interpret *p_interpret) { _CHECK TRACK switch (p_interpret->tt) { - //case TT_ARR: //TODO cleanup TT_ARR case TT_MY: { if (_NEXT_TT != TT_IDENT) @@ -200,7 +200,7 @@ _var_decl(Interpret *p_interpret) { } } default: - break; + break; } return (0); @@ -226,8 +226,8 @@ _var_assign(Interpret *p_interpret) { p_interpret->p_stack = stack_new(); if (_expression_(p_interpret)) { - function_process_buildin(p_interpret, p_token, - p_interpret->p_stack); + function_process_buildin(p_interpret, p_token, + p_interpret->p_stack); stack_merge(p_stack, p_interpret->p_stack); stack_delete(p_interpret->p_stack); @@ -236,7 +236,6 @@ _var_assign(Interpret *p_interpret) { p_token = stack_top(p_interpret->p_stack); Symbol *p_symbol = symbol_new(SYM_VARIABLE, p_token); scope_newset(p_interpret->p_scope, c_name, p_symbol); - } else { return (0); } @@ -298,11 +297,10 @@ _block_get(Interpret *p_interpret, List *p_list_block) { } int -_expression_get(Interpret *p_interpret, List *p_list_expression) { +__expression_get(Interpret *p_interpret, List *p_list_expression) { for (;;) { - if (p_interpret->tt == TT_PARANT_CL) { + if (p_interpret->tt == TT_PARANT_CL) break; /* for */ - } list_add_back(p_list_expression, p_interpret->p_token); @@ -319,7 +317,36 @@ _expression_get(Interpret *p_interpret, List *p_list_expression) { } int -_block_skip(Interpret *p_interpret) { +__array_get(Interpret *p_interpret, Token *p_token_arr) { +#ifdef DEBUG_ARRAY_GET + printf("====> ARRAY\n"); +#endif /* DEBUG_ARRAY_GET */ + Array *p_array = p_token_arr->p_array; + + do { + Token *p_token = p_interpret->p_token; + +#ifdef DEBUG_ARRAY_GET + printf("Insert: "); + token_print_ln(p_token); +#endif /* DEBUG_ARRAY_GET */ + + array_unshift(p_array, p_token); + token_ref_up(p_token); + _NEXT + } while (p_interpret->tt != TT_PARANT_AR); + +#ifdef DEBUG_ARRAY_GET + printf("<==== ARRAY\n"); +#endif /* DEBUG_ARRAY_GET */ + /* Ignore TT_PARANT_AR */ + _NEXT + + return (0); +} + +int +__block_skip(Interpret *p_interpret) { if (p_interpret->tt != TT_PARANT_CL) _INTERPRET_ERROR("Expected '{'", p_interpret->p_token); _NEXT @@ -523,7 +550,7 @@ _control(Interpret *p_interpret) { _NEXT - _expression_get(p_interpret, p_list_expr); + __expression_get(p_interpret, p_list_expr); _block_get(p_interpret, p_list_block); Token *p_token_backup = p_interpret->p_token; @@ -541,7 +568,6 @@ _control(Interpret *p_interpret) { Token *p_token_top = stack_pop(p_interpret->p_stack); if (p_token_top == NULL) { - printf("FOO\n"); exit(0); } if (tt == TT_WHILE) { @@ -786,6 +812,7 @@ _term(Interpret *p_interpret) { case TT_INTEGER: case TT_DOUBLE: case TT_STRING: + case TT_ARRAY: stack_push(p_interpret->p_stack, p_interpret->p_token); _NEXT return (1); @@ -917,9 +944,13 @@ _term(Interpret *p_interpret) { Token *p_token = p_interpret->p_token; _NEXT - Token *p_token_arr = token_new_array(ARRAY_SIZE); + Token *p_token_arr = token_new_array(ARRAY_SIZE); stack_push(p_interpret->p_stack, p_token_arr); - _INTERPRET_ERROR("arrays not yet fully implemented", p_token_arr); + + if (__array_get(p_interpret, p_token_arr) != 0) + _INTERPRET_ERROR("Array syntax error", p_token); + + return (1); } break; |
