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. nritems
- 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 ITEM_NUMBER_MAX INT_MAX
typedef int item_number_t;
extern item_number_t *ritem;
-extern int nritems;
+extern unsigned int nritems;
/* There is weird relationship between item_number_t and
token_number_t: we store token_number_t in item_number_t, but in
const char *action;
int action_line;
-
- const char *guard;
- int guard_line;
} rule_t;
extern struct rule_s *rules;
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. */
/* 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_ */