Prototype support of %lex-param and %parse-param.

* src/parse-gram.y: Add the definition of the %lex-param and
%parse-param tokens, plus their rules.
Drop the `_' version of %glr-parser.
Add the "," token.
* src/scan-gram.l (INITIAL): Scan them.
* src/muscle_tab.c: Comment changes.
(muscle_insert, muscle_find): Rename `pair' as `probe'.
* src/muscle_tab.h (MUSCLE_INSERT_PREFIX): Remove unused.
(muscle_entry_s): The `value' member is no longer const.
Adjust all dependencies.
* src/muscle_tab.c (muscle_init): Adjust: use
MUSCLE_INSERT_STRING.
Initialize the obstack earlier.
* src/muscle_tab.h, src/muscle_tab.c (muscle_grow)
(muscle_pair_list_grow): New.
* data/c.m4 (b4_c_function_call, b4_c_args): New.
* data/yacc.c (YYLEX): Use b4_c_function_call to honor %lex-param.
* tests/calc.at: Use %locations, not --locations.
(AT_CHECK_CALC_GLR): Use %glr-parser, not %glr_parser.
This commit is contained in:
Akim Demaille
2002-10-19 14:38:06 +00:00
parent 0e57572183
commit ae7453f2ba
13 changed files with 1322 additions and 1140 deletions

View File

@@ -1,4 +1,4 @@
/* Definitions for macrotab.c and callers, part of bison,
/* Muscle table manager for Bison,
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -21,17 +21,15 @@
#ifndef MUSCLE_TAB_H_
# define MUSCLE_TAB_H_
# define MTABSIZE 101
typedef struct muscle_entry_s
{
const char *key;
const char *value;
char *value;
} muscle_entry_t;
void muscle_init PARAMS ((void));
void muscle_insert PARAMS ((const char *key, const char *value));
const char *muscle_find PARAMS ((const char *key));
void muscle_insert PARAMS ((const char *key, char *value));
char *muscle_find PARAMS ((const char *key));
void muscle_free PARAMS ((void));
@@ -59,14 +57,27 @@ extern struct obstack muscle_obstack;
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
}
#define MUSCLE_INSERT_PREFIX(Key, Value) \
{ \
obstack_fgrow2 (&muscle_obstack, "%s%s", \
spec_name_prefix ? spec_name_prefix : "yy", Value); \
obstack_1grow (&muscle_obstack, 0); \
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
#define MUSCLE_GROW_STRING_PAIR(Key, Value1, Value2) \
{ \
obstack_sgrow (&muscle_obstack, Value1); \
obstack_1grow (&muscle_obstack, 0); \
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
}
/* Insert (KEY, VALUE). If KEY already existed, overwrite the
previous value. Uses MUSCLE_OBSTACK. De-allocates the previously
associated value. VALUE and SEPARATOR are copied. */
void muscle_grow PARAMS ((const char *key,
const char *value, const char *separator));
/* MUSCLE is an M4 list of pairs. Create or extend it with the pair
(A1, A2). Note that because the muscle values are output *double*
quoted, one needs to strip the first level of quotes to reach the
list itself. */
void muscle_pair_list_grow PARAMS ((const char *muscle,
const char *a1, const char *a2));
void muscles_m4_output PARAMS ((FILE *out));