1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Executing Actions.                               -*- Autotest -*-
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is free software; you can redistribute it and/or modify
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# it under the terms of the GNU General Public License as published by
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# the Free Software Foundation; either version 2, or (at your option)
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# any later version.
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is distributed in the hope that it will be useful,
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# GNU General Public License for more details.
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# You should have received a copy of the GNU General Public License
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# along with this program; if not, write to the Free Software
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# 02110-1301, USA.
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_BANNER([[User Actions.]])
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ------------------ ##
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Mid-rule actions.  ##
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ------------------ ##
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([Mid-rule actions])
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Bison once forgot the mid-rule actions.  It was because the action
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# was attached to the host rule (the one with the mid-rule action),
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# instead of being attached to the empty rule dedicated to this
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# action.
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_DATA_GRAMMAR([[input.y]],
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[%error-verbose
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%debug
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%{
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include <stdio.h>
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include <stdlib.h>
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static void yyerror (const char *msg);
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static int yylex (void);
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%}
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectexp:     { putchar ('0'); }
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '1' { putchar ('1'); }
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '2' { putchar ('2'); }
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '3' { putchar ('3'); }
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '4' { putchar ('4'); }
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '5' { putchar ('5'); }
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '6' { putchar ('6'); }
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '7' { putchar ('7'); }
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '8' { putchar ('8'); }
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     '9' { putchar ('9'); }
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project         { putchar ('\n'); }
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   ;
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic int
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyylex (void)
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static const char *input = "123456789";
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return *input++;
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyyerror (const char *msg)
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fprintf (stderr, "%s\n", msg);
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectmain (void)
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyparse ();
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK([bison -d -v -o input.c input.y])
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_COMPILE([input])
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([./input], 0,
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[0123456789
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ---------------- ##
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Exotic Dollars.  ##
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ---------------- ##
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([Exotic Dollars])
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_DATA_GRAMMAR([[input.y]],
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[%error-verbose
95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%debug
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%{
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include <stdio.h>
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include <stdlib.h>
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static void yyerror (const char *msg);
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static int yylex (void);
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define USE(Var)
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%}
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%union
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int val;
107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%type <val> a_1 a_2 a_5
110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project            sum_of_the_five_previous_values
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectexp: a_1 a_2 { $<val>$ = 3; } { $<val>$ = $<val>3 + 1; } a_5
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     sum_of_the_five_previous_values
115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       USE (($1, $2, $<foo>3, $<foo>4, $5));
117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       printf ("%d\n", $6);
118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project;
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecta_1: { $$ = 1; };
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecta_2: { $$ = 2; };
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecta_5: { $$ = 5; };
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsum_of_the_five_previous_values:
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       $$ = $<val>0 + $<val>-1 + $<val>-2 + $<val>-3 + $<val>-4;
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project;
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic int
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyylex (void)
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return EOF;
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyyerror (const char *msg)
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fprintf (stderr, "%s\n", msg);
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectmain (void)
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyparse ();
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK([bison -d -v -o input.c input.y], 0)
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_COMPILE([input])
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([./input], 0,
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[15
154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## -------------------------- ##
161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Printers and Destructors.  ##
162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## -------------------------- ##
163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# _AT_CHECK_PRINTER_AND_DESTRUCTOR($1, $2, $3, $4, BISON-DIRECTIVE, UNION-FLAG)
165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# -----------------------------------------------------------------------------
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_CHECK_PRINTER_AND_DESTRUCTOR],
167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[# Make sure complex $n work.
168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_if([$1$2$3], $[1]$[2]$[3], [],
169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       [m4_fatal([$0: Invalid arguments: $@])])dnl
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Be sure to pass all the %directives to this macro to have correct
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# helping macros.  So don't put any directly in the Bison file.
173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_BISON_OPTION_PUSHDEFS([$5])
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_DATA_GRAMMAR([[input.y]],
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[%{
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdio.h>
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdlib.h>
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <assert.h>
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYINITDEPTH 10
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYMAXDEPTH 10
182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]AT_LALR1_CC_IF(
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  [#define RANGE(Location) (Location).begin.line, (Location).end.line],
184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  [#define RANGE(Location) (Location).first_line, (Location).last_line])
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[%}
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project$5]
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_ifval([$6], [%union
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int ival;
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}])
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_LALR1_CC_IF([%define "global_tokens_and_yystype"])
193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%{
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]AT_LALR1_CC_IF([typedef yy::location YYLTYPE;
196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                m4_ifval([$6], , [#define YYSTYPE int])])
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[static int yylex (]AT_LEX_FORMALS[);
198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]AT_LALR1_CC_IF([], [static void yyerror (const char *msg);])
199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[%}
200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]m4_ifval([$6], [%type <ival> '(' 'x' 'y' ')' ';' thing line input])[
202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%printer
204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  {
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    ]AT_LALR1_CC_IF([debug_stream () << $$;],
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project                    [fprintf (yyoutput, "%d", $$)])[;
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  }
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  input line thing 'x' 'y'
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%destructor
211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { printf ("Freeing nterm input (%d@%d-%d)\n", $$, RANGE (@$)); }
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  input
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%destructor
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { printf ("Freeing nterm line (%d@%d-%d)\n", $$, RANGE (@$)); }
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  line
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%destructor
219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { printf ("Freeing nterm thing (%d@%d-%d)\n", $$, RANGE (@$)); }
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  thing
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%destructor
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { printf ("Freeing token 'x' (%d@%d-%d)\n", $$, RANGE (@$)); }
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  'x'
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%destructor
227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  { printf ("Freeing token 'y' (%d@%d-%d)\n", $$, RANGE (@$)); }
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  'y'
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This grammar is made to exercise error recovery.
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   "Lines" starting with `(' support error recovery, with
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   ')' as synchronizing token.  Lines starting with 'x' can never
235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   be recovered from if in error.
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project*/
237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput:
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Nothing. */
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      $$ = 0;
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      printf ("input (%d@%d-%d): /* Nothing */\n", $$, RANGE (@$));
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| line input /* Right recursive to load the stack so that popping at
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		EOF can	be exercised.  */
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      $$ = 2;
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      printf ("input (%d@%d-%d): line (%d@%d-%d) input (%d@%d-%d)\n",
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2));
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project;
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline:
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  thing thing thing ';'
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      $$ = $1;
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      printf ("line (%d@%d-%d): thing (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ';' (%d@%d-%d)\n",
258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              $3, RANGE (@3), $4, RANGE (@4));
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| '(' thing thing ')'
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      $$ = $1;
264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2),
266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              $3, RANGE (@3), $4, RANGE (@4));
267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| '(' thing ')'
269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      $$ = $1;
271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      printf ("line (%d@%d-%d): '(' (%d@%d-%d) thing (%d@%d-%d) ')' (%d@%d-%d)\n",
272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              $$, RANGE (@$), $1, RANGE (@1), $2, RANGE (@2), $3, RANGE (@3));
273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| '(' error ')'
275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      $$ = -1;
277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      printf ("line (%d@%d-%d): '(' (%d@%d-%d) error (@%d-%d) ')' (%d@%d-%d)\n",
278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              $$, RANGE (@$), $1, RANGE (@1), RANGE (@2), $3, RANGE (@3));
279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project;
281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing:
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  'x'
284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      $$ = $1;
286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      printf ("thing (%d@%d-%d): 'x' (%d@%d-%d)\n",
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project              $$, RANGE (@$), $1, RANGE (@1));
288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project;
290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Alias to ARGV[1]. */
292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectconst char *source = 0;
293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic int
295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyylex (]AT_LEX_FORMALS[)
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static unsigned int counter = 0;
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int c = ]AT_VAL[]m4_ifval([$6], [.ival])[ = counter++;
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* As in BASIC, line numbers go from 10 to 10.  */
301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]AT_LALR1_CC_IF(
302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[ AT_LOC.begin.line = AT_LOC.begin.column = 10 * c;
303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  AT_LOC.end.line = AT_LOC.end.column = AT_LOC.begin.line + 9;
304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project],
305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[ AT_LOC.first_line = AT_LOC.first_column = 10 * c;
306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  AT_LOC.last_line = AT_LOC.last_column = AT_LOC.first_line + 9;
307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])[
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (source[c])
310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    printf ("sending: '%c'", source[c]);
311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    printf ("sending: EOF");
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  printf (" (%d@%d-%d)\n", c, RANGE (]AT_LOC[));
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return source[c];
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]AT_LALR1_CC_IF(
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[/* A C++ error reporting function. */
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyy::parser::error (const location& l, const std::string& m)
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  printf ("%d-%d: %s\n", RANGE (l), m.c_str());
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool yydebug;
326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyyparse ()
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yy::parser parser;
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  parser.set_debug_level (yydebug);
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return parser.parse ();
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project],
334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[static void
335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyyerror (const char *msg)
336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  printf ("%d-%d: %s\n", RANGE (yylloc), msg);
338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}])[
339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint
341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectmain (int argc, const char *argv[])
342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int status;
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yydebug = !!getenv ("YYDEBUG");
345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  assert (argc == 2);
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  source = argv[1];
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  status = yyparse ();
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  switch (status)
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 0: printf ("Successful parse.\n"); break;
351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      case 1: printf ("Parsing FAILED.\n"); break;
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      default: printf ("Parsing FAILED (status %d).\n", status); break;
353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return status;
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_LALR1_CC_IF(
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  [AT_CHECK([bison -o input.cc input.y])
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   AT_COMPILE_CXX([input])],
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  [AT_CHECK([bison -o input.c input.y])
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   AT_COMPILE([input])])
363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Check the location of "empty"
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# -----------------------------
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# I.e., epsilon-reductions, as in "(x)" which ends by reducing
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# an empty "line" nterm.
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# FIXME: This location is not satisfying.  Depend on the lookahead?
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([./input '(x)'], 0,
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[sending: '(' (0@0-9)
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (1@10-19)
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (1@10-19): 'x' (1@10-19)
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (2@20-29)
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: EOF (3@30-39)
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (0@29-29): /* Nothing */
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (2@0-29): line (0@0-29) input (0@29-29)
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm input (2@0-29)
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectSuccessful parse.
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Check locations in error recovery
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ---------------------------------
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# '(y)' is an error, but can be recovered from.  But what's the location
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# of the error itself ('y'), and of the resulting reduction ('(error)').
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([./input '(y)'], 0,
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[sending: '(' (0@0-9)
390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'y' (1@10-19)
391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project10-19: syntax error, unexpected 'y', expecting 'x'
392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing token 'y' (1@10-19)
393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (2@20-29)
394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (-1@0-29): '(' (0@0-9) error (@10-19) ')' (2@20-29)
395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: EOF (3@30-39)
396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (0@29-29): /* Nothing */
397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (2@0-29): line (-1@0-29) input (0@29-29)
398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm input (2@0-29)
399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectSuccessful parse.
400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Syntax errors caught by the parser
404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ----------------------------------
405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Exercise the discarding of stack top and input until `error'
406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# can be reduced.
407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#     '(', 'x', 'x', 'x', 'x', 'x', ')',
409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Load the stack and provoke an error that cannot be caught by the
411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# grammar, to check that the stack is cleared.  And make sure the
412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# lookahead is freed.
413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#     '(', 'x', ')',
415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#     '(', 'x', ')',
416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#     'y'
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([./input '(xxxxx)(x)(x)y'], 1,
418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[sending: '(' (0@0-9)
419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (1@10-19)
420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (1@10-19): 'x' (1@10-19)
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (2@20-29)
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (2@20-29): 'x' (2@20-29)
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (3@30-39)
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project30-39: syntax error, unexpected 'x', expecting ')'
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm thing (2@20-29)
426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm thing (1@10-19)
427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing token 'x' (3@30-39)
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (4@40-49)
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing token 'x' (4@40-49)
430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (5@50-59)
431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing token 'x' (5@50-59)
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (6@60-69)
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (-1@0-69): '(' (0@0-9) error (@10-59) ')' (6@60-69)
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (7@70-79)
435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (8@80-89)
436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (8@80-89): 'x' (8@80-89)
437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (9@90-99)
438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (7@70-99): '(' (7@70-79) thing (8@80-89) ')' (9@90-99)
439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (10@100-109)
440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (11@110-119)
441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (11@110-119): 'x' (11@110-119)
442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (12@120-129)
443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (10@100-129): '(' (10@100-109) thing (11@110-119) ')' (12@120-129)
444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'y' (13@130-139)
445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (0@129-129): /* Nothing */
446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (2@100-129): line (10@100-129) input (0@129-129)
447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (2@70-129): line (7@70-99) input (2@100-129)
448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectinput (2@0-129): line (-1@0-69) input (2@70-129)
449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project130-139: syntax error, unexpected 'y', expecting $end
450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm input (2@0-129)
451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing token 'y' (13@130-139)
452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectParsing FAILED.
453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Check destruction upon stack overflow
456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# -------------------------------------
457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Upon stack overflow, all symbols on the stack should be destroyed.
458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Only check for yacc.c.
459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_YACC_IF([
460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([./input '(x)(x)(x)(x)(x)(x)(x)'], 2,
461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[sending: '(' (0@0-9)
462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (1@10-19)
463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (1@10-19): 'x' (1@10-19)
464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (2@20-29)
465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (0@0-29): '(' (0@0-9) thing (1@10-19) ')' (2@20-29)
466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (3@30-39)
467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (4@40-49)
468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (4@40-49): 'x' (4@40-49)
469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (5@50-59)
470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (3@30-59): '(' (3@30-39) thing (4@40-49) ')' (5@50-59)
471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (6@60-69)
472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (7@70-79)
473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (7@70-79): 'x' (7@70-79)
474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (8@80-89)
475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (6@60-89): '(' (6@60-69) thing (7@70-79) ')' (8@80-89)
476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (9@90-99)
477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (10@100-109)
478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (10@100-109): 'x' (10@100-109)
479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (11@110-119)
480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (9@90-119): '(' (9@90-99) thing (10@100-109) ')' (11@110-119)
481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (12@120-129)
482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (13@130-139)
483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (13@130-139): 'x' (13@130-139)
484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (14@140-149)
485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (12@120-149): '(' (12@120-129) thing (13@130-139) ')' (14@140-149)
486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (15@150-159)
487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (16@160-169)
488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (16@160-169): 'x' (16@160-169)
489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (17@170-179)
490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectline (15@150-179): '(' (15@150-159) thing (16@160-169) ')' (17@170-179)
491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: '(' (18@180-189)
492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: 'x' (19@190-199)
493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectthing (19@190-199): 'x' (19@190-199)
494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsending: ')' (20@200-209)
495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project200-209: memory exhausted
496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm thing (19@190-199)
497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm line (15@150-179)
498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm line (12@120-149)
499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm line (9@90-119)
500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm line (6@60-89)
501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm line (3@30-59)
502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectFreeing nterm line (0@0-29)
503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectParsing FAILED (status 2).
504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])
506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])
508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# AT_CHECK_PRINTER_AND_DESTRUCTOR([BISON-OPTIONS], [UNION-FLAG], [SKIP_FLAG])
511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ---------------------------------------------------------------------------
512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([AT_CHECK_PRINTER_AND_DESTRUCTOR],
513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[AT_SETUP([Printers and Destructors $2: $1])
514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project$3
516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_CHECK_PRINTER_AND_DESTRUCTOR($[1], $[2], $[3], $[4],
517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[%error-verbose
518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%debug
519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%verbose
520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%locations
521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project$1], [$2])
522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])
525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK_PRINTER_AND_DESTRUCTOR([])
528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK_PRINTER_AND_DESTRUCTOR([], [with union])
529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# These tests currently fail on a Debian GNU/Linux 3.0r2 x86 host,
531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# but the 2nd test succeeds on a Solaris 9 sparc hosts (Forte 7 cc).
532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Skip them until we figure out what the problem is.
533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"])
534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"], [with union])
535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser])
537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union])
538