]> git.saurik.com Git - bison.git/blobdiff - src/gram.h
* src/reader.c (packgram): No longer end `ritem' with a 0
[bison.git] / src / gram.h
index d22be7a960228e1705617a3ca0875f543ce3a846..88946cffbed60774f3eeda3cfc354dee6c4e5084 100644 (file)
@@ -47,7 +47,7 @@
    Therefore 0 cannot be used, since it would be both the rule number
    0, and the token EOF).
 
-   Actions and guards are accessed via the rule number.
+   Actions are accessed via the rule number.
 
    The rules themselves are described by several arrays: amongst which
    RITEM, and RULES.
    contains minus R, which identifies it as the end of a portion and
    says which rule it is for.
 
-   The portions of RITEM come in order of increasing rule number and
-   are followed by an element which is zero to mark the end.  nitems
-   is the total length of ritem, not counting the final zero.  Each
-   element of RITEM is called an "item" and its index in RITEM is an
-   item number.
+   The portions of RITEM come in order of increasing rule number.
+   NRITEMS is the total length of RITEM.  Each element of RITEM is
+   called an "item" and its index in RITEM is an item number.
 
    Item numbers are used in the finite state machine to represent
    places that parsing can get to.
 #define        ISTOKEN(s)      ((s) < ntokens)
 #define        ISVAR(s)        ((s) >= ntokens)
 
-extern int nitems;
 extern int nrules;
 extern int nsyms;
 extern int ntokens;
 extern int nvars;
 
-extern short *ritem;
+#define ITEM_NUMBER_MAX INT_MAX
+typedef int item_number_t;
+extern item_number_t *ritem;
 extern int nritems;
 
-extern int start_symbol;
+/* There is weird relationship between item_number_t and
+   token_number_t: we store token_number_t in item_number_t, but in
+   the latter we also store, as negative numbers, the rule numbers.
+
+   Therefore, an token_number_t must be a valid item_number_t, and we
+   sometimes have to perform the converse transformation.  */
+#define token_number_as_item_number(Tok) ((item_number_t) (Tok))
+#define item_number_as_token_number(Ite) ((token_number_t) (Ite))
+
+extern token_number_t start_symbol;
+
 
 typedef struct rule_s
 {
@@ -126,7 +135,7 @@ typedef struct rule_s
   short number;
 
   symbol_t *lhs;
-  short *rhs;
+  item_number_t *rhs;
 
   /* This symbol provides both the associativity, and the precedence. */
   symbol_t *prec;
@@ -134,14 +143,11 @@ typedef struct rule_s
   /* This symbol was attached to the rule via %prec. */
   symbol_t *precsym;
 
-  short line;
+  int line;
   bool useful;
 
   const char *action;
-  short action_line;
-
-  const char *guard;
-  short guard_line;
+  int action_line;
 } rule_t;
 
 extern struct rule_s *rules;
@@ -149,28 +155,18 @@ extern struct rule_s *rules;
 /* Table of the symbols, indexed by the symbol number. */
 extern symbol_t **symbols;
 
-/* token translation table: indexed by a token number as returned by
-   the user's yylex routine, it yields the internal token number used
-   by the parser and throughout bison.  */
-
-extern short *token_translations;
+/* TOKEN_TRANSLATION -- a table indexed by a token number as returned
+   by the user's yylex routine, it yields the internal token number
+   used by the parser and throughout bison.  */
+extern token_number_t *token_translations;
 extern int max_user_token_number;
 
-/* SEMANTIC_PARSER is nonzero if the input file says to use the hairy
-   parser that provides for semantic error recovery.  If it is zero,
-   the yacc-compatible simplified parser is used.  */
-
-extern int semantic_parser;
 
 /* PURE_PARSER is nonzero if should generate a parser that is all pure
    and reentrant.  */
 
 extern int pure_parser;
 
-/* ERROR_TOKEN_NUMBER is the token number of the error token.  */
-
-extern int error_token_number;
-
 /* Report the length of the RHS. */
 int rule_rhs_length PARAMS ((rule_t *rule));
 
@@ -180,4 +176,10 @@ void ritem_print PARAMS ((FILE *out));
 /* Return the size of the longest rule RHS.  */
 size_t ritem_longest_rhs PARAMS ((void));
 
+/* Dump the grammar. */
+void grammar_dump PARAMS ((FILE *out, const char *title));
+
+/* Free the packed grammar. */
+void grammar_free PARAMS ((void));
+
 #endif /* !GRAM_H_ */