* src/gram.h (associativity): New enum type which replaces the
authorAkim Demaille <akim@epita.fr>
Mon, 2 Oct 2000 08:51:00 +0000 (08:51 +0000)
committerAkim Demaille <akim@epita.fr>
Mon, 2 Oct 2000 08:51:00 +0000 (08:51 +0000)
former CPP macros `RIGHT_ASSOC', `LEFT_ASSOC' and `NON_ASSOC' with
`right_assoc', `left_assoc' and `non_assoc'.
Adjust all dependencies.
* src/reader.c: Formatting changes.
(LTYPESTR): Don't define it, use it as a literal in
`reader_output_yylsp'.
* src/symtab.h (symbol_class): New enum type which replaces the
former CPP macros `SUNKNOWN', `STOKEN and `SNTERM' with
`sunknown', `stoken and `snterm'.

ChangeLog
src/conflicts.c
src/gram.h
src/lex.c
src/reader.c
src/symtab.c
src/symtab.h

index 43098df..3c01953 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2000-10-02  Akim Demaille  <akim@epita.fr>
 
+       * src/gram.h (associativity): New enum type which replaces the
+       former CPP macros `RIGHT_ASSOC', `LEFT_ASSOC' and `NON_ASSOC' with
+       `right_assoc', `left_assoc' and `non_assoc'.
+       Adjust all dependencies.
+       * src/reader.c: Formatting changes.
+       (LTYPESTR): Don't define it, use it as a literal in
+       `reader_output_yylsp'.
+       * src/symtab.h (symbol_class): New enum type which replaces the
+       former CPP macros `SUNKNOWN', `STOKEN and `SNTERM' with
+       `sunknown', `stoken and `snterm'.
+
+2000-10-02  Akim Demaille  <akim@epita.fr>
+
        * src/getargs.c (fixed_outfiles): Rename as...
        (yaccflag): for consistency and accuracy.
        Adjust dependencies.
index 2840dcf..c694f83 100644 (file)
@@ -131,29 +131,29 @@ resolve_sr_conflict (int state, int lookaheadnum)
 
              switch (sassoc[i])
                {
-               case RIGHT_ASSOC:
+               case right_assoc:
                  log_resolution (state, lookaheadnum, i, _("shift"));
                  break;
 
-               case LEFT_ASSOC:
+               case left_assoc:
                  log_resolution (state, lookaheadnum, i, _("reduce"));
                  break;
 
-               case NON_ASSOC:
+               case non_assoc:
                  log_resolution (state, lookaheadnum, i, _("an error"));
                  break;
                }
 
-             if (sassoc[i] != RIGHT_ASSOC)
+             if (sassoc[i] != right_assoc)
                {
                  *fp2 &= ~mask;        /* flush the shift for this token */
                  flush_shift (state, i);
                }
-             if (sassoc[i] != LEFT_ASSOC)
+             if (sassoc[i] != left_assoc)
                {
                  *fp1 &= ~mask;        /* flush the reduce for this token */
                }
-             if (sassoc[i] == NON_ASSOC)
+             if (sassoc[i] == non_assoc)
                {
                  /* Record an explicit error for this token.  */
                  *errtokens++ = i;
index 1b18232..4a04502 100644 (file)
@@ -97,10 +97,13 @@ extern int start_symbol;
 
 
 /* associativity values in elements of rassoc, sassoc.  */
+typedef enum
+{
+  right_assoc,
+  left_assoc,
+  non_assoc
+} associativity;
 
-#define RIGHT_ASSOC 1
-#define LEFT_ASSOC 2
-#define NON_ASSOC 3
 
 /* token translation table: indexed by a token number as returned by
    the user's yylex routine, it yields the internal token number used
index cc27ccb..4ed8d45 100644 (file)
--- a/src/lex.c
+++ b/src/lex.c
@@ -418,7 +418,7 @@ lex (void)
        *p++ = '\'';
        *p = 0;
        symval = getsym (token_buffer);
-       symval->class = STOKEN;
+       symval->class = token_sym;
        if (!symval->user_token_number)
          symval->user_token_number = code;
        return IDENTIFIER;
@@ -440,7 +440,7 @@ lex (void)
        *p = 0;
 
        symval = getsym (token_buffer);
-       symval->class = STOKEN;
+       symval->class = token_sym;
 
        return IDENTIFIER;
       }
index 1dfe020..bd13e04 100644 (file)
 
 extern char *printable_version PARAMS ((int));
 
-#define        LTYPESTR        "\
-\n\
-#ifndef YYLTYPE\n\
-typedef\n\
-  struct yyltype\n\
-\
-    {\n\
-      int timestamp;\n\
-      int first_line;\n\
-      int first_column;\
-\n\
-      int last_line;\n\
-      int last_column;\n\
-      char *text;\n\
-   }\n\
-\
-  yyltype;\n\
-\n\
-#define YYLTYPE yyltype\n\
-#endif\n\
-\n"
-
 /* Number of slots allocated (but not necessarily used yet) in `rline'  */
 static int rline_allocated;
 
@@ -78,11 +56,14 @@ static bucket *startval;
    they must be unions.  */
 static int value_components_used;
 
-static int typed;              /* nonzero if %union has been seen.  */
+/* Nonzero if %union has been seen.  */
+static int typed;
 
-static int lastprec;           /* incremented for each %left, %right or %nonassoc seen */
+/* Incremented for each %left, %right or %nonassoc seen */
+static int lastprec;
 
-static int gensym_count;       /* incremented for each generated symbol */
+/* Incremented for each generated symbol */
+static int gensym_count;
 
 static bucket *errtoken;
 static bucket *undeftoken;
@@ -358,14 +339,14 @@ copy_definition (void)
 }
 
 
-/*-----------------------------------------------------------------.
-| Parse what comes after %token or %nterm.  For %token, what_is is |
-| STOKEN and what_is_not is SNTERM.  For %nterm, the arguments are |
-| reversed.                                                        |
-`-----------------------------------------------------------------*/
+/*-------------------------------------------------------------------.
+| Parse what comes after %token or %nterm.  For %token, WHAT_IS is   |
+| token_sym and WHAT_IS_NOT is nterm_sym.  For %nterm, the arguments |
+| are reversed.                                                      |
+`-------------------------------------------------------------------*/
 
 static void
-parse_token_decl (int what_is, int what_is_not)
+parse_token_decl (symbol_class what_is, symbol_class what_is_not)
 {
   int token = 0;
   char *typename = 0;
@@ -398,7 +379,7 @@ parse_token_decl (int what_is, int what_is_not)
       else if (token == IDENTIFIER && *symval->tag == '\"' && symbol)
        {
          translations = 1;
-         symval->class = STOKEN;
+         symval->class = token_sym;
          symval->type_name = typename;
          symval->user_token_number = symbol->user_token_number;
          symbol->user_token_number = SALIAS;
@@ -417,7 +398,7 @@ parse_token_decl (int what_is, int what_is_not)
          if (symbol->class == what_is_not)
            complain (_("symbol %s redefined"), symbol->tag);
          symbol->class = what_is;
-         if (what_is == SNTERM && oldclass != SNTERM)
+         if (what_is == nterm_sym && oldclass != nterm_sym)
            symbol->value = nvars++;
 
          if (typename)
@@ -436,7 +417,7 @@ parse_token_decl (int what_is, int what_is_not)
       else
        {
          complain (_("`%s' is invalid in %s"),
-                   token_buffer, (what_is == STOKEN) ? "%token" : "%nterm");
+                   token_buffer, (what_is == token_sym) ? "%token" : "%nterm");
          skip_to_char ('%');
        }
     }
@@ -444,7 +425,9 @@ parse_token_decl (int what_is, int what_is_not)
 }
 
 
-/* Parse what comes after %start */
+/*------------------------------.
+| Parse what comes after %start |
+`------------------------------*/
 
 static void
 parse_start_decl (void)
@@ -556,11 +539,13 @@ parse_type_decl (void)
 
 
 
-/* read in a %left, %right or %nonassoc declaration and record its information.  */
-/* assoc is either LEFT_ASSOC, RIGHT_ASSOC or NON_ASSOC.  */
+/*----------------------------------------------------------------.
+| Read in a %left, %right or %nonassoc declaration and record its |
+| information.                                                    |
+`----------------------------------------------------------------*/
 
 static void
-parse_assoc_decl (int assoc)
+parse_assoc_decl (associativity assoc)
 {
   int k;
   char *name = NULL;
@@ -597,9 +582,9 @@ parse_assoc_decl (int assoc)
            complain (_("redefining precedence of %s"), symval->tag);
          symval->prec = lastprec;
          symval->assoc = assoc;
-         if (symval->class == SNTERM)
+         if (symval->class == nterm_sym)
            complain (_("symbol %s redefined"), symval->tag);
-         symval->class = STOKEN;
+         symval->class = token_sym;
          if (name)
            {                   /* record the type, if one is specified */
              if (symval->type_name == NULL)
@@ -639,9 +624,11 @@ token_buffer);
 
 
 
-/* copy the union declaration into fattrs (and fdefines),
-   where it is made into the
-   definition of YYSTYPE, the type of elements of the parser value stack.  */
+/*-------------------------------------------------------------------.
+| Copy the union declaration into fattrs (and fdefines), where it is |
+| made into the definition of YYSTYPE, the type of elements of the   |
+| parser value stack.                                                |
+`-------------------------------------------------------------------*/
 
 static void
 parse_union_decl (void)
@@ -710,8 +697,11 @@ parse_union_decl (void)
     }
 }
 
-/* parse the declaration %expect N which says to expect N
-   shift-reduce conflicts.  */
+
+/*-------------------------------------------------------.
+| Parse the declaration %expect N which says to expect N |
+| shift-reduce conflicts.                                |
+`-------------------------------------------------------*/
 
 static void
 parse_expect_decl (void)
@@ -789,7 +779,7 @@ parse_thong_decl (void)
       skip_to_char ('%');
       return;
     }
-  symval->class = STOKEN;
+  symval->class = token_sym;
   symval->type_name = typename;
   symval->user_token_number = SALIAS;
   symbol = symval;
@@ -812,7 +802,7 @@ parse_thong_decl (void)
       skip_to_char ('%');
       return;
     }
-  symval->class = STOKEN;
+  symval->class = token_sym;
   symval->type_name = typename;
   symval->user_token_number = usrtoknum;
 
@@ -822,6 +812,7 @@ parse_thong_decl (void)
   nsyms--;                     /* symbol and symval combined are only one symbol */
 }
 
+
 /*----------------------------------------------------------------.
 | Read from finput until `%%' is seen.  Discard the `%%'.  Handle |
 | any `%' declarations, and copy the contents of any `%{ ... %}'  |
@@ -852,11 +843,11 @@ read_declarations (void)
              break;
 
            case TOKEN:
-             parse_token_decl (STOKEN, SNTERM);
+             parse_token_decl (token_sym, nterm_sym);
              break;
 
            case NTERM:
-             parse_token_decl (SNTERM, STOKEN);
+             parse_token_decl (nterm_sym, token_sym);
              break;
 
            case TYPE:
@@ -877,16 +868,17 @@ read_declarations (void)
            case THONG:
              parse_thong_decl ();
              break;
+
            case LEFT:
-             parse_assoc_decl (LEFT_ASSOC);
+             parse_assoc_decl (left_assoc);
              break;
 
            case RIGHT:
-             parse_assoc_decl (RIGHT_ASSOC);
+             parse_assoc_decl (right_assoc);
              break;
 
            case NONASSOC:
-             parse_assoc_decl (NON_ASSOC);
+             parse_assoc_decl (non_assoc);
              break;
 
            case SEMANTIC_PARSER:
@@ -1234,7 +1226,7 @@ gensym (void)
 
   sprintf (token_buffer, "@%d", ++gensym_count);
   sym = getsym (token_buffer);
-  sym->class = SNTERM;
+  sym->class = nterm_sym;
   sym->value = nvars++;
   return sym;
 }
@@ -1374,13 +1366,13 @@ readgram (void)
 
          /* mark the rule's lhs as a nonterminal if not already so.  */
 
-         if (lhs->class == SUNKNOWN)
+         if (lhs->class == unknown_sym)
            {
-             lhs->class = SNTERM;
+             lhs->class = nterm_sym;
              lhs->value = nvars;
              nvars++;
            }
-         else if (lhs->class == STOKEN)
+         else if (lhs->class == token_sym)
            complain (_("rule given for %s, which is a token"), lhs->tag);
 
          /* read the rhs of the rule.  */
@@ -1534,12 +1526,12 @@ readgram (void)
 */
       else if (t == TOKEN)
        {
-         parse_token_decl (STOKEN, SNTERM);
+         parse_token_decl (token_sym, nterm_sym);
          t = lex ();
        }
       else if (t == NTERM)
        {
-         parse_token_decl (SNTERM, STOKEN);
+         parse_token_decl (nterm_sym, token_sym);
          t = lex ();
        }
       else if (t == TYPE)
@@ -1592,12 +1584,12 @@ readgram (void)
   /* Report any undefined symbols and consider them nonterminals.  */
 
   for (bp = firstsymbol; bp; bp = bp->next)
-    if (bp->class == SUNKNOWN)
+    if (bp->class == unknown_sym)
       {
        complain (_
                  ("symbol %s is used, but is not defined as a token and has no rules"),
 bp->tag);
-       bp->class = SNTERM;
+       bp->class = nterm_sym;
        bp->value = nvars++;
       }
 
@@ -1684,7 +1676,7 @@ packsymbols (void)
 
   for (bp = firstsymbol; bp; bp = bp->next)
     {
-      if (bp->class == SNTERM)
+      if (bp->class == nterm_sym)
        {
          bp->value += ntokens;
        }
@@ -1724,12 +1716,12 @@ packsymbols (void)
            continue;           /* do not do processing below for SALIASs */
 
        }
-      else                     /* bp->class == STOKEN */
+      else                     /* bp->class == token_sym */
        {
          bp->value = tokno++;
        }
 
-      if (bp->class == STOKEN)
+      if (bp->class == token_sym)
        {
          if (translations && !(bp->user_token_number))
            bp->user_token_number = ++last_user_token_number;
@@ -1775,9 +1767,9 @@ packsymbols (void)
   if (!noparserflag)
     output_token_defines (ftable);
 
-  if (startval->class == SUNKNOWN)
+  if (startval->class == unknown_sym)
     fatal (_("the start symbol %s is undefined"), startval->tag);
-  else if (startval->class == STOKEN)
+  else if (startval->class == token_sym)
     fatal (_("the start symbol %s is a token"), startval->tag);
 
   start_symbol = startval->value;
@@ -1849,7 +1841,7 @@ packgram (void)
          ritem[itemno++] = p->sym->value;
          /* A rule gets by default the precedence and associativity
             of the last token in it.  */
-         if (p->sym->class == STOKEN)
+         if (p->sym->class == token_sym)
            {
              rprec[ruleno] = p->sym->prec;
              rassoc[ruleno] = p->sym->assoc;
@@ -1925,12 +1917,12 @@ reader (void)
   tabinit ();
   /* Construct the error token */
   errtoken = getsym ("error");
-  errtoken->class = STOKEN;
+  errtoken->class = token_sym;
   errtoken->user_token_number = 256;   /* Value specified by POSIX.  */
   /* Construct a token that represents all undefined literal tokens.
      It is always token number 2.  */
   undeftoken = getsym ("$undefined.");
-  undeftoken->class = STOKEN;
+  undeftoken->class = token_sym;
   undeftoken->user_token_number = 2;
 
   /* Read the declaration section.  Copy %{ ... %} groups to FTABLE
@@ -1967,9 +1959,31 @@ reader (void)
   free_symtab ();
 }
 
+
 void
 reader_output_yylsp (FILE *f)
 {
   if (yylsp_needed)
-    fprintf (f, LTYPESTR);
+    fputs ("\
+\n\
+#ifndef YYLTYPE\n\
+typedef\n\
+  struct yyltype\n\
+\
+    {\n\
+      int timestamp;\n\
+      int first_line;\n\
+      int first_column;\
+\n\
+      int last_line;\n\
+      int last_column;\n\
+      char *text;\n\
+   }\n\
+\
+  yyltype;\n\
+\n\
+#define YYLTYPE yyltype\n\
+#endif\n\
+\n",
+          f);
 }
index b264f08..1bc2c37 100644 (file)
@@ -101,7 +101,7 @@ getsym (const char *key)
       bp->link = symtab[hashval];
       bp->next = NULL;
       bp->tag = copys(key);
-      bp->class = SUNKNOWN;
+      bp->class = unknown_sym;
 
       if (firstsymbol == NULL)
        {
index 03ae90f..c68ec8f 100644 (file)
 
 #ifndef SYMTAB_H_
 # define SYMTAB_H_
+# include "gram.h"
 
 #define        TABSIZE 1009
 
 /*  symbol classes  */
 
-#define SUNKNOWN 0
-#define STOKEN  1              /* terminal symbol */
-#define SNTERM  2              /* non-terminal */
+typedef enum
+{
+  unknown_sym,
+  token_sym,           /* terminal symbol */
+  nterm_sym            /* non-terminal */
+} symbol_class;
 
 #define SALIAS -9991           /* for symbol generated with an alias */
 
@@ -39,13 +43,13 @@ typedef struct bucket
   char *type_name;
   short value;
   short prec;
-  short assoc;
+  associativity assoc;
   short user_token_number;
   /* special value SALIAS in the identifier half of the
      identifier-symbol pair for an alias */
   struct bucket *alias;
   /* points to the other in the identifier-symbol pair for an alias */
-  char class;
+  symbol_class class;
 }
 bucket;