AT_BISON_OPTION_PUSHDEFS
AT_DATA_GRAMMAR([input.y],
[[%{
-#include <stdio.h>
]AT_YYERROR_DECLARE_EXTERN[
]AT_YYLEX_DECLARE_EXTERN[
void print_my_token (void);
int val;
};
%{
+#include <stdio.h>
void
print_my_token (void)
{
# Bison managed, when fed with '%token 'f' "f"' to #define 'f'!
AT_DATA_GRAMMAR([input.y],
[%{
-#include <stdlib.h>
-#include <stdio.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
%}
}
$1
%token ARROW INVALID NUMBER STRING DATA
-%defines
%verbose
%error-verbose
/* Grammar follows */
[%{
static int yylex (AT_LALR1_CC_IF([int *], [void]));
AT_LALR1_CC_IF([[#include <cstdlib>]],
-[[#include <stdlib.h>
-#include <stdio.h>
+[[
]AT_YYERROR_DECLARE])[
%}
$1
-%defines
%error-verbose
%token A 1000
%token B
AT_BISON_OPTION_PUSHDEFS([%debug])
AT_DATA_GRAMMAR([input.y],
[[%{
-#include <stdio.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
%}
%debug
%error-verbose
-
%%
start:
# we lost this in Bison 1.50.
AT_BISON_OPTION_PUSHDEFS
AT_DATA_GRAMMAR([input.y],
-[[%{
- #include <stdio.h>
+[[%code {
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
-%}
+}
%error-verbose
%right END 0
AT_BISON_OPTION_POPDEFS
AT_BISON_CHECK([[-o input.c input.y]], [[0]],,
-[[input.y:23.5-19: warning: rule useless in parser due to conflicts: start: start [-Wother]
-input.y:27.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias" [-Wother]
+[[input.y:24.5-19: warning: rule useless in parser due to conflicts: start: start [-Wother]
+input.y:28.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias" [-Wother]
]])
AT_COMPILE([[input]])
AT_PARSER_CHECK([[./input]])
AT_BISON_OPTION_PUSHDEFS
AT_DATA_GRAMMAR([input.y],
[[%code {
- #include <stdio.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
#define YYSTACK_USE_ALLOCA 1
AT_BISON_OPTION_PUSHDEFS
AT_DATA_GRAMMAR([input.y],
[[%code {
- #include <stdio.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
AT_DATA_GRAMMAR([input.y],
[[%code {
- #include <stdio.h>
]AT_YYERROR_DECLARE[
int yylex (]AT_PURE_IF([[YYSTYPE *]], [[void]])[);
}
[AT_BISON_OPTION_PUSHDEFS([%debug])
AT_DATA_GRAMMAR([input.y],
[[%code {
- #include <stdio.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
#define YYMAXDEPTH 8
m4_pushdef([AT_TEST],
[AT_SETUP([[Lex and parse params: $1]])
+## FIXME: Improve parsing of parse-param.
AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1" %parse-param { int x } %parse-param { int y }])
-## FIXME: Improve parsing of parse-param and use the generated
-## yyerror.
AT_DATA_GRAMMAR([input.y],
-[[%defines
-%locations
+[[%locations
%skeleton "$1"
%union { int ival; }
%parse-param { int x }
}
%{
-#include <stdio.h>
-#include <stdlib.h>
-
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
%}
AT_TEST([glr.cc])
m4_popdef([AT_TEST])
+
+
+## ----------------------- ##
+## stdio.h is not needed. ##
+## ----------------------- ##
+
+# At some point, by accident, yy_location_print_ was using fprintf and
+# FILE which are from stdio.h, which we do not require.
+AT_SETUP([[stdio.h is not needed]])
+
+AT_BISON_OPTION_PUSHDEFS
+
+AT_DATA_GRAMMAR([input.y],
+[[%locations
+%code
+{
+ static int yylex (void) { return 0; }
+ static void yyerror (const char* msg) { (void) msg; }
+}
+%%
+exp: {}
+%%
+]AT_MAIN_DEFINE[
+]])
+
+AT_FULL_COMPILE([input])
+
+AT_BISON_OPTION_POPDEFS
+
+AT_CLEANUP