Provide a means to factor lex-param and parse-param common
declarations.

	* src/parse-gram.y (param_type): New.
	Define a %printer for it.
	(add_param): Use it.
	(%parse-param, %lex-param): Merge into...
	(%parse): this new token.
	Adjust the grammar to use it.
	* src/scan-gram.l (RETURN_VALUE): New.
	(RETURN_PERCENT_FLAG): Use it.
	(RETURN_PERCENT_PARAM): New.
	Use it to support %parse-param, %lex-param and %param.
This commit is contained in:
Akim Demaille
2009-09-03 14:15:13 +02:00
parent c6abeab182
commit a7706735d1
3 changed files with 108 additions and 43 deletions

View File

@@ -56,10 +56,16 @@ static boundary scanner_cursor;
static size_t no_cr_read (FILE *, char *, size_t);
#define YY_INPUT(buf, result, size) ((result) = no_cr_read (yyin, buf, size))
#define RETURN_PERCENT_FLAG(Value) \
#define RETURN_PERCENT_PARAM(Value) \
RETURN_VALUE(PERCENT_PARAM, param, param_ ## Value)
#define RETURN_PERCENT_FLAG(Value) \
RETURN_VALUE(PERCENT_FLAG, uniqstr, uniqstr_new (Value))
#define RETURN_VALUE(Token, Field, Value) \
do { \
val->uniqstr = uniqstr_new (Value); \
return PERCENT_FLAG; \
val->Field = Value; \
return Token; \
} while (0)
#define ROLLBACK_CURRENT_TOKEN \
@@ -204,7 +210,7 @@ splice (\\[ \f\t\v]*\n)*
"%glr-parser" return PERCENT_GLR_PARSER;
"%language" return PERCENT_LANGUAGE;
"%left" return PERCENT_LEFT;
"%lex-param" return PERCENT_LEX_PARAM;
"%lex-param" RETURN_PERCENT_PARAM(lex);
"%locations" RETURN_PERCENT_FLAG("locations");
"%merge" return PERCENT_MERGE;
"%name"[-_]"prefix" return PERCENT_NAME_PREFIX;
@@ -214,7 +220,8 @@ splice (\\[ \f\t\v]*\n)*
"%nondeterministic-parser" return PERCENT_NONDETERMINISTIC_PARSER;
"%nterm" return PERCENT_NTERM;
"%output" return PERCENT_OUTPUT;
"%parse-param" return PERCENT_PARSE_PARAM;
"%param" RETURN_PERCENT_PARAM(both);
"%parse-param" RETURN_PERCENT_PARAM(parse);
"%prec" return PERCENT_PREC;
"%precedence" return PERCENT_PRECEDENCE;
"%printer" return PERCENT_PRINTER;