# along with this program. If not, see <http://www.gnu.org/licenses/>.
-m4_include(b4_pkgdatadir/[c.m4])
+# If we are loaded by glr.cc, do not override c++.m4 definitions by
+# those of c.m4.
+m4_if(b4_skeleton, ["glr.c"],
+ [m4_include(b4_pkgdatadir/[c.m4])])
## ---------------- ##
## Default values. ##
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif
-
/* YYLEX -- calling `yylex' with the right arguments. */
#define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
[static void],
[[FILE *], []],
[[int yytype], [yytype]],
- [[const b4_namespace_ref::b4_parser_class_name::semantic_type *yyvaluep],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::semantic_type *yyvaluep],
[yyvaluep]],
- [[const b4_namespace_ref::b4_parser_class_name::location_type *yylocationp],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
[yylocationp]],
b4_parse_param)[
{
#define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
]b4_c_ansi_function_decl([yyerror],
[static void],
- [[const b4_namespace_ref::b4_parser_class_name::location_type *yylocationp],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
[yylocationp]],
b4_parse_param,
[[const char* msg], [msg]])])
-# Define yyerror.
+# Hijack the epilogue to define implementations (yyerror, parser member
+# functions etc.).
m4_append([b4_epilogue],
[b4_syncline([@oline@], [@ofile@])[
/*------------------.
]b4_c_ansi_function_def([yyerror],
[static void],
- [[const b4_namespace_ref::b4_parser_class_name::location_type *yylocationp],
+ [[const ]b4_namespace_ref::b4_parser_class_name[::location_type *yylocationp],
[yylocationp]],
b4_parse_param,
[[const char* msg], [msg]])[
# Let glr.c believe that the user arguments include the parser itself.
m4_ifset([b4_parse_param],
[m4_pushdef([b4_parse_param],
- m4_dquote([[[b4_namespace_ref::b4_parser_class_name& yyparser], [[yyparser]]],]
-m4_defn([b4_parse_param])))],
+ [[b4_namespace_ref::b4_parser_class_name[& yyparser], [[yyparser]]],]
+m4_defn([b4_parse_param]))],
[m4_pushdef([b4_parse_param],
- [[[[b4_namespace_ref::b4_parser_class_name& yyparser], [[yyparser]]]]])
+ [[b4_namespace_ref::b4_parser_class_name[& yyparser], [[yyparser]]]])
])
m4_include(b4_pkgdatadir/[glr.c])
m4_popdef([b4_parse_param])
ECHO(x4_parse());
x5_::parser p5;
ECHO(p5.parse());
-// ECHO(x6_parse());
+// x6_::parser p6;
+// ECHO(p6.parse());
return 0;
}
]])
AT_DATA_GRAMMAR_SEVERAL([x3], [%glr-parser])
AT_DATA_GRAMMAR_SEVERAL([x4], [%locations %debug %glr-parser])
AT_DATA_GRAMMAR_SEVERAL([x5], [%locations %debug %language "c++"])
-#AT_DATA_GRAMMAR_SEVERAL([x6], [%locations %language "c++"])
+#AT_DATA_GRAMMAR_SEVERAL([x5], [%locations %language "c++" %glr-parser])
AT_COMPILE_CXX([parser], [x1.o x2.o x3.o x4.o x5.o main.cc])
AT_CHECK([./parser], [0],