Allow a user specified parameter to 'yyparse()', in a manner similar to

that used by bison.  The names are consistent with the bison implementation
but this one also allows the type of the parameter to be specified.

For a desired prototype of:

	int yyparse __P((struct yyresult *));

and compile like this:

	yacc -dv grammar.y
	cc -c -DYYPARSE_PARAM_TYPE="struct yyresult *" \
	      -DYYPARSE_PARAM="parm" y.tab.c

and use like this:

	${
	#include "usrtypes.h"
	#include "usrproto.h"
	}$

	%token NUMBER

	%%

	goal : NUMBER
		{
		parm->value = yylval;
		} ;

If YYPARSE_PARAM_TYPE isn't specified then "void *" is the default type.
If YYPARSE_PARAM is not specified then the generated code behaves exactly
as traditional byacc.

PR:		13562
Submitted by:	W Gerald Hicks <wghicks@bellsouth.net>
This commit is contained in:
David E. O'Brien 1999-10-27 17:51:37 +00:00
parent 6877f580de
commit c3584b3b4e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=52569

View File

@ -67,10 +67,6 @@ char *banner[] =
"#define yyclearin (yychar=(YYEMPTY))",
"#define yyerrok (yyerrflag=0)",
"#define YYRECOVERING() (yyerrflag!=0)",
#if 0
"extern int yylex();",
"extern int yyparse();",
#endif
"static int yygrowstack();",
0
};
@ -163,12 +159,19 @@ char *body[] =
"#define YYACCEPT goto yyaccept",
"#define YYERROR goto yyerrlab",
"",
"int",
"#if defined(__cplusplus) || __STDC__",
"yyparse(void)",
"#ifndef YYPARSE_PARAM",
"#define YYPARSE_PARAM",
"#define YYPARSE_PARAM_DECL",
"#else",
"yyparse()",
"#ifndef YYPARSE_PARAM_TYPE",
"#define YYPARSE_PARAM_TYPE void *",
"#endif",
"#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;",
"#endif",
"",
"int",
"yyparse (YYPARSE_PARAM)",
" YYPARSE_PARAM_DECL",
"{",
" register int yym, yyn, yystate;",
"#if YYDEBUG",