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