--- gforth/vmgen-ex/mini.y 2001/04/29 11:28:24 1.1 +++ gforth/vmgen-ex/mini.y 2007/12/31 19:02:25 1.7 @@ -1,12 +1,12 @@ /* front-end compiler for vmgen example - Copyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2001,2002,2003,2007 Free Software Foundation, Inc. This file is part of Gforth. Gforth 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 2 + 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, @@ -15,8 +15,7 @@ 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, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + along with this program; if not, see http://www.gnu.org/licenses/. */ /* I use yacc/bison here not because I think it's the best tool for @@ -40,7 +39,13 @@ int vm_debug; void yyerror(char *s) { - fprintf (stderr, "%s: %d: %s\n", program_name, yylineno, s); +#if 1 + /* for pure flex call */ + fprintf(stderr, "%s: %s\n", program_name, s); +#else + /* lex or flex -l supports yylineno */ + fprintf (stderr, "%s: %d: %s\n", program_name, yylineno, s); +#endif } #include "mini-gen.i" @@ -94,16 +99,16 @@ stats: stats stat ';' stat: IF expr THEN { gen_zbranch(&vmcodep, 0); $$ = vmcodep; } stats { $$ = $4; } - elsepart END IF { BB_BOUNDARY; $7[-1] = vmcodep; } + elsepart END IF { BB_BOUNDARY; $7[-1] = (Inst)vmcodep; } | WHILE { BB_BOUNDARY; $$ = vmcodep; } expr DO { gen_zbranch(&vmcodep, 0); $$ = vmcodep; } - stats END WHILE { gen_branch(&vmcodep, $2); $5[-1] = vmcodep; } + stats END WHILE { gen_branch(&vmcodep, $2); $5[-1] = (Inst)vmcodep; } | IDENT BECOMES expr { gen_storelocal(&vmcodep, var_offset($1)); } | PRINT expr { gen_print(&vmcodep); } | expr { gen_drop(&vmcodep); } ; -elsepart: ELSE { gen_branch(&vmcodep, 0); $$ = vmcodep; $0[-1] = vmcodep; } +elsepart: ELSE { gen_branch(&vmcodep, 0); $$ = vmcodep; $0[-1] = (Inst)vmcodep; } stats { $$ = $2; } | { $$ = $0; } ; @@ -126,7 +131,7 @@ term: '(' expr ')' | NUM { gen_lit(&vmcodep, $1); } ; -/* missing: argument counting and checking against calling function */ +/* missing: argument counting and checking against called function */ args: expr ',' args | expr | ;