From aa321494cf73bbeb52657c718557299f3fb0807c Mon Sep 17 00:00:00 2001 From: Robert Anisko Date: Sat, 25 Aug 2001 14:21:46 +0000 Subject: [PATCH] * src/macrotab.c: New file. * src/macrotab.h: New file. * src/Makefile.am: Update. --- ChangeLog | 6 +++ src/Makefile.am | 2 + src/macrotab.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++ src/macrotab.h | 36 ++++++++++++++ 4 files changed, 171 insertions(+) create mode 100644 src/macrotab.c create mode 100644 src/macrotab.h diff --git a/ChangeLog b/ChangeLog index 75bdd858..cc7a51f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-08-25 Robert Anisko + + * src/macrotab.c: New file. + * src/macrotab.h: New file. + * src/Makefile.am: Update. + 2001-08-25 Robert Anisko * lib/hash.c: New file. diff --git a/src/Makefile.am b/src/Makefile.am index b757258e..ae5e26d7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -14,6 +14,7 @@ bison_SOURCES = LR0.c closure.c complain.c conflicts.c \ derives.c \ files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \ output.c \ + macrotab.c \ print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c EXTRA_bison_SOURCES = vmsgetargs.c @@ -22,6 +23,7 @@ noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \ derives.h \ files.h getargs.h gram.h lalr.h lex.h nullable.h \ output.h state.h \ + macrotab.h \ print.h reader.h reduce.h symtab.h warshall.h system.h types.h \ vcg.h vcg_defaults.h print_graph.h diff --git a/src/macrotab.c b/src/macrotab.c new file mode 100644 index 00000000..91944ac2 --- /dev/null +++ b/src/macrotab.c @@ -0,0 +1,127 @@ +/* Macro table manager for Bison, + Copyright 1984, 1989, 2000 Free Software Foundation, Inc. + + This file is part of Bison, the GNU Compiler Compiler. + + Bison 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, or (at your option) + any later version. + + Bison 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 Bison; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include + +#include "system.h" +#include "hash.h" +#include "files.h" +#include "macrotab.h" + +struct hash_table macro_table; + +static unsigned long +mhash1 (const void* item) +{ + return_STRING_HASH_1 (((macro_entry_t*) item)->key); +} + +static unsigned long +mhash2 (const void* item) +{ + return_STRING_HASH_2 (((macro_entry_t*) item)->key); +} + +static int +mcmp (const void* x, const void* y) +{ + return strcmp (((macro_entry_t*) x)->key, ((macro_entry_t*) y)->key); +} + +void +macro_init (void) +{ + hash_init (¯o_table, MTABSIZE, &mhash1, &mhash2, &mcmp); + + /* Version and input file. */ + macro_insert ("version", VERSION); + macro_insert ("filename", "a.y"); + + /* Types. */ + macro_insert ("stype", "int"); + macro_insert ("ltype", "yyltype"); + + /* Tokens. */ + macro_insert ("tokendef", ""); + + /* Tables. */ + macro_insert ("rhs", "0"); + macro_insert ("pact", "0"); + macro_insert ("prhs", "0"); + macro_insert ("stos", "0"); + macro_insert ("check", "0"); + macro_insert ("pgoto", "0"); + macro_insert ("table", "0"); + macro_insert ("tname", "0"); + macro_insert ("defact", "0"); + macro_insert ("toknum", "0"); + macro_insert ("defgoto", "0"); + macro_insert ("translate", "0"); + + /* Various macros. */ + macro_insert ("flag", "0"); + macro_insert ("last", "0"); + macro_insert ("pure", "0"); + macro_insert ("nsym", "0"); + macro_insert ("debug", "0"); + macro_insert ("final", "0"); + macro_insert ("maxtok", "0"); + macro_insert ("ntbase", "0"); + macro_insert ("verbose", "0"); + + /* Variable prefix names. */ + macro_insert ("yyparse", "yyparse"); + macro_insert ("yylex", "yylex"); + macro_insert ("yyerror", "yyerror"); + macro_insert ("yylval", "yylval"); + macro_insert ("yychar", "yychar"); + macro_insert ("yydebug", "yydebug"); + macro_insert ("yynerrs", "yynerrs"); + + /* No parser macros. */ + macro_insert ("nnts", "0"); + macro_insert ("nrules", "0"); + macro_insert ("nstates", "0"); + macro_insert ("ntokens", "0"); + + /* Stack parameters. */ + macro_insert ("maxdepth", "10000"); + macro_insert ("initdepth", "200"); + + /* C++ macros. */ + macro_insert ("name", "Parser"); +} + +void +macro_insert (char* key, char* value) +{ + macro_entry_t* pair = (macro_entry_t*) xmalloc (sizeof (macro_entry_t)); + pair->key = key; + pair->value = value; + hash_insert (¯o_table, pair); +} + +char* +macro_find (char* key) +{ + macro_entry_t pair = { key, 0 }; + macro_entry_t* result = hash_find_item (¯o_table, &pair); + return result ? result->value : 0; +} diff --git a/src/macrotab.h b/src/macrotab.h new file mode 100644 index 00000000..6c3a364f --- /dev/null +++ b/src/macrotab.h @@ -0,0 +1,36 @@ +/* Definitions for macrotab.c and callers, part of bison, + Copyright 2001 Free Software Foundation, Inc. + + This file is part of Bison, the GNU Compiler Compiler. + + Bison 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, or (at your option) + any later version. + + Bison 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 Bison; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef MACROTAB_H_ +# define MACROTAB_H_ + +#define MTABSIZE 101 + +typedef struct macro_entry_s +{ + char* key; + char* value; +} macro_entry_t; + +void macro_init PARAMS ((void)); +void macro_insert PARAMS ((char* key, char* value)); +char* macro_find PARAMS ((char* key)); + +#endif /* not MACROTAB_H_ */ -- 2.47.2