From 3a2839fec91869c508c910499095e99a8f6dac46 Mon Sep 17 00:00:00 2001 From: obrien Date: Wed, 27 Oct 1999 17:51:37 +0000 Subject: [PATCH] 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 --- usr.bin/yacc/skeleton.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/usr.bin/yacc/skeleton.c b/usr.bin/yacc/skeleton.c index f3d6dd0d3630..90235cb0e937 100644 --- a/usr.bin/yacc/skeleton.c +++ b/usr.bin/yacc/skeleton.c @@ -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",