+ /**
+ * Whether this node contains a symbol, a semantic type, a \c <*>, or a
+ * \c <>.
+ */
+ enum {
+ SYMLIST_SYMBOL, SYMLIST_TYPE,
+ SYMLIST_DEFAULT_TAGGED, SYMLIST_DEFAULT_TAGLESS
+ } content_type;
+ union {
+ /** The symbol or \c NULL iff <tt>node_type = SYMLIST_SYMBOL</tt>. */
+ symbol *sym;
+ /** The semantic type iff <tt>node_type = SYMLIST_TYPE</tt>. */
+ uniqstr type_name;
+ } content;
+ location location;
+
+ /* If this symbol is the generated lhs for a midrule but this is the rule in
+ whose rhs it appears, MIDRULE = a pointer to that midrule. */
+ struct symbol_list *midrule;
+
+ /* If this symbol is the generated lhs for a midrule and this is that
+ midrule, MIDRULE_PARENT_RULE = a pointer to the rule in whose rhs it
+ appears, and MIDRULE_PARENT_RHS_INDEX = its rhs index (1-origin) in the
+ parent rule. */
+ struct symbol_list *midrule_parent_rule;
+ int midrule_parent_rhs_index;