AT_BANNER([[Named references tests.]])
AT_SETUP([Tutorial calculator])
-
+AT_BISON_OPTION_PUSHDEFS
AT_DATA_GRAMMAR([test.y],
[[
%{
+#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static semantic_value global_result = 0;
static int global_count = 0;
static int power (int base, int exponent);
-static void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
%}
%union
%token <ival> NUM "number"
%type <ival> exp
-%nonassoc '=' /* comparison */
+%nonassoc '=' /* comparison */
%left '-' '+'
%left '*' '/'
-%left NEG /* negation--unary minus */
+%precedence NEG /* negation--unary minus */
%right '^' /* exponentiation */
%%
| '-' error { $$ = 0; YYERROR; }
;
%%
-
-static void yyerror (const char *s)
-{
- fprintf (stderr, "%s\n", s);
-}
-
+]AT_YYERROR_DEFINE[
static int get_char (void)
{
int res = getc (input);
return sign * n;
}
-int yylex (void)
+static int
+yylex (void)
{
int c;
/* Skip white space. */
}
status = yyparse ();
fclose (input);
- if (global_result != result)
- abort ();
- if (global_count != count)
- abort ();
+ assert (global_result == result);
+ assert (global_count == count);
return status;
}
]])
AT_BISON_CHECK([-o test.c test.y])
AT_COMPILE([[test]])
AT_PARSER_CHECK([./test input.txt], 0, [], [stderr])
+AT_BISON_OPTION_POPDEFS
AT_CLEANUP
AT_SETUP([Undefined and ambiguous references])
-
+AT_BISON_OPTION_PUSHDEFS
AT_DATA_GRAMMAR([test.y],
[[
%{
static int power (int base, int exponent);
-static void yyerror (const char *s);
-int yylex (void);
+]AT_YYERROR_DECLARE[
+]AT_YYLEX_DECLARE[
%}
%union
%token <ival> NUM "number"
%type <ival> exp
-%nonassoc '=' /* comparison */
+%nonassoc '=' /* comparison */
%left '-' '+'
%left '*' '/'
-%left NEG /* negation--unary minus */
+%precedence NEG /* negation--unary minus */
%right '^' /* exponentiation */
%%
AT_BISON_CHECK([-o test.c test.y], 1, [],
[[test.y:50.51-60: invalid reference: '$<ival>lo9'
test.y:50.3-68: symbol not found in production: lo9
-test.y:51.51-60: warning: misleading reference: '$<ival>exp'
-test.y:42.1-3: warning: refers to: $exp at $$
-test.y:51.7: warning: possibly meant: $x, hiding $exp at $1
-test.y:51.41: warning: possibly meant: $r, hiding $exp at $4
+test.y:51.51-60: warning: misleading reference: '$<ival>exp' [-Wother]
+test.y:42.1-3: warning: refers to: $exp at $$ [-Wother]
+test.y:51.7: warning: possibly meant: $x, hiding $exp at $1 [-Wother]
+test.y:51.41: warning: possibly meant: $r, hiding $exp at $4 [-Wother]
test.y:52.51-52: $l of 'exp' has no declared type
test.y:55.46-49: invalid reference: '$r12'
test.y:55.3-53: symbol not found in production: r12
test.y:56.29-33: invalid reference: '$expo'
test.y:56.3-46: symbol not found in production: expo
]])
+AT_BISON_OPTION_POPDEFS
AT_CLEANUP
#######################################################################
foo.bar: '2'
]])
AT_BISON_CHECK([-o test.c test.y], 0, [],
-[[test.y:11.22-29: warning: misleading reference: '$foo.bar'
-test.y:11.8-10: warning: refers to: $foo at $1
-test.y:11.12-18: warning: possibly meant: $[foo.bar] at $2
+[[test.y:11.22-29: warning: misleading reference: '$foo.bar' [-Wother]
+test.y:11.8-10: warning: refers to: $foo at $1 [-Wother]
+test.y:11.12-18: warning: possibly meant: $[foo.bar] at $2 [-Wother]
]])
AT_CLEANUP
;
]])
AT_BISON_CHECK([[test.y]], [[0]], [],
-[[test.y:4.9: warning: stray '$'
-test.y:5.9: warning: stray '@'
+[[test.y:4.9: warning: stray '$' [-Wother]
+test.y:5.9: warning: stray '@' [-Wother]
]])
AT_CLEANUP