Named symbol references.

Discussed in:
http://lists.gnu.org/archive/html/bison-patches/2009-01/msg00000.html
http://lists.gnu.org/archive/html/bison-patches/2009-02/msg00002.html
http://lists.gnu.org/archive/html/bison-patches/2009-03/msg00009.html

	* src/parse-gram.y: Add new syntax (named_ref.opt).
	* src/reader.c: Store named refs in symbol lists.
	* src/reader.h: New argument for symbol_append and
	action_append functions.
	* src/scan-code.h: Add new field (named_ref) into
	code_props data structure. Keeps named ref of midrule
	actions.
	* src/scan-code.l: Support for named refs in semantic
	action code. New function 'parse_named_ref'.
	* src/scan-gram.l: Support bracketed id.
	* src/symlist.c: Store named refs in symbol lists.
	* src/symlist.h: New field in symbol list: named_ref.
	* src/named-ref.h: New file, a struct for named_ref.
	* src/named-ref.c: New file, named_ref_new function.
	* src/Makefile.am: Add two new files.
	* tests/testsuite.at: Include new test group:
	* tests/named-refs.at: this new file.
This commit is contained in:
Alex Rozenman
2009-05-23 18:48:03 +03:00
parent 67f8cf51c3
commit 7685e2f7ba
14 changed files with 1161 additions and 86 deletions

View File

@@ -21,6 +21,7 @@
# define SCAN_CODE_H_
# include "location.h"
# include "named-ref.h"
struct symbol_list;
@@ -64,6 +65,9 @@ typedef struct code_props {
/** \c NULL iff \c code_props::kind is not \c CODE_PROPS_RULE_ACTION. */
struct symbol_list *rule;
/* Named reference. */
named_ref *named_ref;
} code_props;
/**
@@ -76,7 +80,7 @@ void code_props_none_init (code_props *self);
/** Equivalent to \c code_props_none_init. */
#define CODE_PROPS_NONE_INIT \
{CODE_PROPS_NONE, NULL, EMPTY_LOCATION_INIT, false, NULL}
{CODE_PROPS_NONE, NULL, EMPTY_LOCATION_INIT, false, NULL, NULL}
/** Initialized by \c CODE_PROPS_NONE_INIT with no further modification. */
extern code_props const code_props_none;
@@ -129,7 +133,8 @@ void code_props_symbol_action_init (code_props *self, char const *code,
* - The caller frees \c rule.
*/
void code_props_rule_action_init (code_props *self, char const *code,
location code_loc, struct symbol_list *rule);
location code_loc, struct symbol_list *rule,
named_ref *named_ref);
/**
* \pre