-/*-------------------------------------------------------------------.
-| Parse what comes after %thong. the full syntax is |
-| |
-| %thong <type> token number literal |
-| |
-| the <type> or number may be omitted. The number specifies the |
-| user_token_number. |
-| |
-| Two symbols are entered in the table, one for the token symbol and |
-| one for the literal. Both are given the <type>, if any, from the |
-| declaration. The ->user_token_number of the first is SALIAS and |
-| the ->user_token_number of the second is set to the number, if |
-| any, from the declaration. The two symbols are linked via |
-| pointers in their ->alias fields. |
-| |
-| During OUTPUT_DEFINES_TABLE, the symbol is reported thereafter, |
-| only the literal string is retained it is the literal string that |
-| is output to yytname |
-`-------------------------------------------------------------------*/
-
-static void
-parse_thong_decl (void)
-{
- token_t token;
- struct bucket *symbol;
- char *typename = 0;
- int usrtoknum = SUNDEF;
-
- token = lex (); /* fetch typename or first token */
- if (token == tok_typename)
- {
- typename = xstrdup (token_buffer);
- value_components_used = 1;
- token = lex (); /* fetch first token */
- }
-
- /* process first token */
-
- if (token != tok_identifier)
- {
- complain (_("unrecognized item %s, expected an identifier"),
- token_buffer);
- skip_to_char ('%');
- return;
- }
- symval->class = token_sym;
- symval->type_name = typename;
- symval->user_token_number = SALIAS;
- symbol = symval;
-
- token = lex (); /* get number or literal string */
-
- if (token == tok_number)
- {
- usrtoknum = numval;
- token = lex (); /* okay, did number, now get literal */
- }
-
- /* process literal string token */
-
- if (token != tok_identifier || *symval->tag != '\"')
- {
- complain (_("expected string constant instead of %s"), token_buffer);
- skip_to_char ('%');
- return;
- }
- symval->class = token_sym;
- symval->type_name = typename;
- symval->user_token_number = usrtoknum;
-
- symval->alias = symbol;
- symbol->alias = symval;
-
- /* symbol and symval combined are only one symbol. */
- nsyms--;
-}
-
-
-static void
-parse_muscle_decl (void)
-{
- int ch = ungetc (skip_white_space (), finput);
- char *muscle_key;
- char *muscle_value;
-
- /* Read key. */
- if (!isalpha (ch) && ch != '_')
- {
- complain (_("invalid %s declaration"), "%define");
- skip_to_char ('%');
- return;
- }
- copy_identifier (finput, &muscle_obstack);
- obstack_1grow (&muscle_obstack, 0);
- muscle_key = obstack_finish (&muscle_obstack);
-
- /* Read value. */
- ch = skip_white_space ();
- if (ch != '"')
- {
- ungetc (ch, finput);
- if (ch != EOF)
- {
- complain (_("invalid %s declaration"), "%define");
- skip_to_char ('%');
- return;
- }
- else
- fatal (_("Premature EOF after %s"), "\"");
- }
- copy_string2 (finput, &muscle_obstack, '"', 0);
- obstack_1grow (&muscle_obstack, 0);
- muscle_value = obstack_finish (&muscle_obstack);
-
- /* Store the (key, value) pair in the environment. */
- muscle_insert (muscle_key, muscle_value);
-}
-
-
-
-/*---------------------------------.
-| Parse a double quoted parameter. |
-`---------------------------------*/
-
-static const char *
-parse_dquoted_param (const char *from)
-{
- struct obstack param_obstack;
- const char *param = NULL;
- int c;
-
- obstack_init (¶m_obstack);
- c = skip_white_space ();
-
- if (c != '"')
- {
- complain (_("invalid %s declaration"), from);
- ungetc (c, finput);
- skip_to_char ('%');
- return NULL;
- }
-
- while ((c = literalchar ()) != '"')
- obstack_1grow (¶m_obstack, c);
-
- obstack_1grow (¶m_obstack, '\0');
- param = obstack_finish (¶m_obstack);
-
- if (c != '"' || strlen (param) == 0)
- {
- complain (_("invalid %s declaration"), from);
- if (c != '"')
- ungetc (c, finput);
- skip_to_char ('%');
- return NULL;
- }
-
- return param;
-}
-
-/*----------------------------------.
-| Parse what comes after %skeleton. |
-`----------------------------------*/