%{
#include <stdio.h>
#include <stdlib.h>
+#include <assert.h>
#define YYSTYPE int
static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1);
for (;;)
{
int ch;
- if (feof (stdin))
- abort ();
+ assert (!feof (stdin));
ch = getchar ();
if (ch == EOF)
return 0;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+ #include <assert.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
%}
{
char buf[50];
char *s;
- if (feof (stdin))
- abort ();
+ assert (!feof (stdin));
switch (fscanf (input, " %1[a-z,]", buf))
{
case 1:
}
if (fscanf (input, "%49s", buf) != 1)
return 0;
- if (sizeof buf - 1 <= strlen (buf))
- abort ();
+ assert (strlen (buf) < sizeof buf - 1);
s = (char *) malloc (strlen (buf) + 1);
strcpy (s, buf);
yylval = s;
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <assert.h>
static int MergeRule (int x0, int x1);
]AT_YYERROR_DECLARE[
int yylex (void)
{
char inp[3];
- if (feof (stdin))
- abort ();
+ assert (!feof (stdin));
if (fscanf (input, "%2s", inp) == EOF)
return 0;
switch (inp[0])
%%
]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE([a])[
+]AT_YYLEX_DEFINE(["a"])[
int
main (void)
;
%%
-]AT_YYLEX_DEFINE(a)[
+]AT_YYLEX_DEFINE(["a"])[
]AT_YYERROR_DEFINE[
int
main (void)
%%
]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE(a)[
+]AT_YYLEX_DEFINE(["a"])[
int
main (void)
{
%%
]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE()[
+]AT_YYLEX_DEFINE[
int
main (void)
%%
]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE([a])[
+]AT_YYLEX_DEFINE(["a"])[
int
main (void)
%{
# include <stdlib.h>
+# include <assert.h>
static int merge (YYSTYPE, YYSTYPE);
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
}
]AT_YYERROR_DEFINE[
-static int
-yylex (void)
-{
- static int const input[] = { PARENT_RHS_AFTER, 0 };
- static size_t toknum;
- if (! (toknum < sizeof input / sizeof *input))
- abort ();
- if (input[toknum] == PARENT_RHS_AFTER)
- parent_rhs_after_value = 1;
- return input[toknum++];
-}
+]AT_YYLEX_DEFINE([{ PARENT_RHS_AFTER, 0 }],
+ [if (res == PARENT_RHS_AFTER)
+ parent_rhs_after_value = 1;])[
int
main (void)
%{
#include <stdio.h>
+ #include <assert.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
static void print_lookahead (char const *);
%%
]AT_YYERROR_DEFINE[
-static int
-yylex (void)
-{
- static char const input[] = "ab";
- static size_t toknum;
- if (! (toknum < sizeof input))
- abort ();
- yylloc.first_line = yylloc.last_line = 1;
- yylloc.first_column = yylloc.last_column = toknum + 1;
- yylval.value = input[toknum] + 'A' - 'a';
- return input[toknum++];
-}
+]AT_YYLEX_DEFINE(["ab"],
+ [yylval.value = res + 'A' - 'a'])[
static void
print_lookahead (char const *reduction)
%{
#include <stdlib.h>
#include <stdio.h>
+ #include <assert.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
static void print_lookahead (char const *);
{
static char const input[] = "abcdddd";
static size_t toknum;
- if (! (toknum < sizeof input))
- abort ();
+ assert (toknum < sizeof input);
yylloc.first_line = yylloc.last_line = 1;
yylloc.first_column = yylloc.last_column = toknum + 1;
yylval.value = input[toknum] + 'A' - 'a';
%%
]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE()[
+]AT_YYLEX_DEFINE[
int
main (void)
%{
# include <stdlib.h>
+# include <assert.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
static int lookahead_value = 0;
%%
]AT_YYERROR_DEFINE[
-static int
-yylex (void)
-{
- static char const input[] = "ab";
- static size_t toknum;
- if (! (toknum < sizeof input))
- abort ();
- if (input[toknum] == 'b')
- lookahead_value = 1;
- return input[toknum++];
-}
+]AT_YYLEX_DEFINE(["ab"],
+ [if (res == 'b')
+ lookahead_value = 1])[
int
main (void)
AT_SETUP([Uninitialized location when reporting ambiguity])
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%glr-parser %locations %define api.pure])
+
AT_DATA_GRAMMAR([glr-regr17.y],
[[
%glr-parser
%union { int dummy; }
%{
- static void yyerror (YYLTYPE *, char const *);
- static int yylex (YYSTYPE *, YYLTYPE *);
+ ]AT_YYERROR_DECLARE[
+ ]AT_YYLEX_DECLARE[
%}
-%initial-action {
- @$.first_line = 1;
- @$.first_column = 1;
- @$.last_line = 1;
- @$.last_column = 1;
-}
-
%%
/* Tests the case of an empty RHS that has inherited the location of the
empty2: ;
%%
+# include <assert.h>
-static void
-yyerror (YYLTYPE *locp, char const *msg)
-{
- fprintf (stderr, "%d.%d-%d.%d: %s.\n", locp->first_line,
- locp->first_column, locp->last_line, locp->last_column, msg);
-}
-
+]AT_YYERROR_DEFINE[
static int
yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
{
static char const input[] = "ab";
static size_t toknum;
- if (! (toknum < sizeof input))
- abort ();
+ assert (toknum < sizeof input);
lvalp->dummy = 0;
llocp->first_line = llocp->last_line = 2;
llocp->first_column = toknum + 1;
AT_COMPILE([glr-regr17])
AT_PARSER_CHECK([[./glr-regr17]], 0, [],
-[1.1-2.3: syntax is ambiguous.
+[1.1-2.2: syntax is ambiguous
])
AT_CLEANUP
%%
]AT_YYERROR_DEFINE[
-]AT_YYLEX_DEFINE()[
+]AT_YYLEX_DEFINE[
int
main (void)
{
AT_BISON_OPTION_POPDEFS
AT_BISON_CHECK([[-o glr-regr18.c glr-regr18.y]], 1, [],
-[glr-regr18.y:26.18-24: result type clash on merge function 'merge': <type2> != <type1>
-glr-regr18.y:25.18-24: previous declaration
-glr-regr18.y:27.13-19: result type clash on merge function 'merge': <type3> != <type2>
-glr-regr18.y:26.18-24: previous declaration
+[glr-regr18.y:26.18-24: error: result type clash on merge function 'merge': <type2> != <type1>
+glr-regr18.y:25.18-24: previous declaration
+glr-regr18.y:27.13-19: error: result type clash on merge function 'merge': <type3> != <type2>
+glr-regr18.y:26.18-24: previous declaration
])
AT_CLEANUP
b: 'b';
d: /* nada. */;
%%
-]AT_YYLEX_DEFINE([abc])[
+]AT_YYLEX_DEFINE(["abc"])[
]AT_YYERROR_DEFINE[
int
main (void)