1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Checking GLR Parsing.                         -*- Autotest -*-
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Copyright (C) 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([[C++ Type Syntax (GLR).]])
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# _AT_TEST_GLR_CXXTYPES(DECL, RESOLVE1, RESOLVE2)
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# -----------------------------------------------
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Store into types.y the calc program, with DECL inserted as a declaration,
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# and with RESOLVE1 and RESOLVE2 as annotations on the conflicted rule for
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# stmt.  Then compile the result.
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_TEST_GLR_CXXTYPES],
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_BISON_OPTION_PUSHDEFS([$1])
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_DATA_GRAMMAR([types.y],
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[/* Simplified C++ Type and Expression Grammar.  */
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project$1
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%{
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #include <stdio.h>
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  union Node {
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    struct {
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int isNterm;
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int parents;
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    } nodeInfo;
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    struct {
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int isNterm; /* 1 */
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int parents;
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      char const *form;
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      union Node *children[3];
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    } nterm;
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    struct {
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int isNterm; /* 0 */
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int parents;
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      char *text;
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    } term;
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  };
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  typedef union Node Node;
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static Node *new_nterm (char const *, Node *, Node *, Node *);
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static Node *new_term (char *);
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static void free_node (Node *);
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static char *node_to_string (Node *);
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #define YYSTYPE Node *
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]m4_bmatch([$2], [stmtMerge],
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[ static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);])[
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #define YYINITDEPTH 10
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  #define YYSTACKEXPANDABLE 1
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  struct YYLTYPE;
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYPURE
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# if YYLSP_NEEDED
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# else
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define LEX_PARAMETERS YYSTYPE *lvalp
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef LEX_PARAMETERS
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define LEX_PARAMETERS void
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef ERROR_PARAMETERS
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define ERROR_PARAMETERS char const *s
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yylex (LEX_PARAMETERS);
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  void yyerror (ERROR_PARAMETERS);
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%}
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%token TYPENAME ID
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%right '='
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%left '+'
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%glr-parser
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%destructor { free_node ($$); } stmt expr decl declarator TYPENAME ID
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectprog :
95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | prog stmt   {
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			char *output;]AT_LOCATION_IF([
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			printf ("%d.%d-%d.%d: ",
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     @2.first_line, @2.first_column,
99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			     @2.last_line, @2.last_column);])[
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			output = node_to_string (]$[2);
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			printf ("%s\n", output);
102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			free (output);
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			free_node (]$[2);
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		   }
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ;
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstmt : expr ';'  $2	{ $$ = ]$[1; }
108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | decl      $3
109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | error ';'	{ $$ = new_nterm ("<error>", 0, 0, 0); }
110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | '@'		{ YYACCEPT; }
111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ;
112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectexpr : ID
114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | TYPENAME '(' expr ')'
115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			{ $$ = new_nterm ("<cast>(%s,%s)", ]$[3, ]$[1, 0); }
116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | expr '+' expr	{ $$ = new_nterm ("+(%s,%s)", ]$[1, ]$[3, 0); }
117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | expr '=' expr    { $$ = new_nterm ("=(%s,%s)", ]$[1, ]$[3, 0); }
118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ;
119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdecl : TYPENAME declarator ';'
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			{ $$ = new_nterm ("<declare>(%s,%s)", ]$[1, ]$[2, 0); }
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | TYPENAME declarator '=' expr ';'
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project			{ $$ = new_nterm ("<init-declare>(%s,%s,%s)", ]$[1,
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project					  ]$[2, ]$[4); }
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ;
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdeclarator : ID
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     | '(' declarator ')' { $$ = ]$[2; }
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     ;
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project%%
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <ctype.h>
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdlib.h>
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <string.h>
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdarg.h>
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectmain (int argc, char **argv)
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (argc != 2)
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    abort ();
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (!freopen (argv[1], "r", stdin))
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return 3;
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyparse ();
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyylex (LEX_PARAMETERS)
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  char buffer[256];
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int c;
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  unsigned int i;
154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static int lineNum = 1;
155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  static int colNum = 0;
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYPURE
158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef yylloc
159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define yylloc (*llocp)
160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef yylval
161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define yylval (*lvalp)
162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  while (1)
165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      c = getchar ();
167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      switch (c)
168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	{
169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	case EOF:
170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  return 0;
171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	case '\t':
172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  colNum = (colNum + 7) & ~7;
173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  break;
174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	case ' ': case '\f':
175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  colNum += 1;
176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  break;
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	case '\n':
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  lineNum += 1;
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  colNum = 0;
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  break;
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	default:
182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  {
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    int tok;
184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYLSP_NEEDED
185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    yylloc.first_line = yylloc.last_line = lineNum;
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    yylloc.first_column = colNum;
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    if (isalpha (c))
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      {
190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		i = 0;
191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		do
193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		  {
194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		    buffer[i++] = c;
195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		    colNum += 1;
196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		    if (i == sizeof buffer - 1)
197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      abort ();
198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		    c = getchar ();
199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		  }
200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		while (isalnum (c) || c == '_');
201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		ungetc (c, stdin);
203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		buffer[i++] = 0;
204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		yylval = new_term (strcpy ((char *) malloc (i), buffer));
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      }
207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    else
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      {
209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		colNum += 1;
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		tok = c;
211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		yylval = 0;
212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	      }
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYLSP_NEEDED
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    yylloc.last_column = colNum-1;
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	    return tok;
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	  }
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project	}
219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid
223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyyerror (ERROR_PARAMETERS)
224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYPURE && YYLSP_NEEDED
226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Pacify GCC by using llocp.  */
227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (! llocp)
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    abort ();
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  fprintf (stderr, "%s\n", s);
231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic Node *
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectnew_nterm (char const *form, Node *child0, Node *child1, Node *child2)
235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  Node *node = (Node *) malloc (sizeof (Node));
237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->nterm.isNterm = 1;
238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->nterm.parents = 0;
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->nterm.form = form;
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->nterm.children[0] = child0;
241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (child0)
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    child0->nodeInfo.parents += 1;
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->nterm.children[1] = child1;
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (child1)
245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    child1->nodeInfo.parents += 1;
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->nterm.children[2] = child2;
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (child2)
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    child2->nodeInfo.parents += 1;
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return node;
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic Node *
253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectnew_term (char *text)
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  Node *node = (Node *) malloc (sizeof (Node));
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->term.isNterm = 0;
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->term.parents = 0;
258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->term.text = text;
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return node;
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectfree_node (Node *node)
264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (!node)
266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return;
267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  node->nodeInfo.parents -= 1;
268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Free only if 0 (last parent) or -1 (no parents).  */
269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (node->nodeInfo.parents > 0)
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return;
271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (node->nodeInfo.isNterm == 1)
272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      free_node (node->nterm.children[0]);
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      free_node (node->nterm.children[1]);
275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      free_node (node->nterm.children[2]);
276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    free (node->term.text);
279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  free (node);
280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic char *
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectnode_to_string (Node *node)
284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  char *child0;
286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  char *child1;
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  char *child2;
288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  char *buffer;
289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (!node)
290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      buffer = (char *) malloc (1);
292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      buffer[0] = 0;
293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else if (node->nodeInfo.isNterm == 1)
295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      child0 = node_to_string (node->nterm.children[0]);
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      child1 = node_to_string (node->nterm.children[1]);
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      child2 = node_to_string (node->nterm.children[2]);
299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0)
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project				+ strlen (child1) + strlen (child2) + 1);
301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      sprintf (buffer, node->nterm.form, child0, child1, child2);
302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      free (child0);
303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      free (child1);
304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      free (child2);
305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    buffer = strdup (node->term.text);
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return buffer;
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]]
312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_bmatch([$2], [stmtMerge],
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[static YYSTYPE
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectstmtMerge (YYSTYPE x0, YYSTYPE x1)
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return new_nterm ("<OR>(%s,%s)", x0, x1, 0);
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project)
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_DATA([test-input],
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectz + q;
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectT x;
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectT x = y;
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectx = y;
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectT (x) + y;
333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectT (x);
335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectT (y) = z + q;
337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectT (y y) = z + q;
339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectz + q;
341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project@
343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectThis is total garbage, but it should be ignored.
345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CHECK([bison -o types.c types.y], 0, [], ignore)
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_COMPILE([types])
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_BISON_OPTION_POPDEFS
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])
351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_RESOLVED_GLR_OUTPUT],
353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[+(z,q)
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<declare>(T,x)
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<init-declare>(T,x,y)
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project=(x,y)
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project+(<cast>(x,T),y)
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<declare>(T,x)
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<init-declare>(T,y,+(z,q))
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<error>
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project+(z,q)
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC],
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[3.0-3.5: +(z,q)
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project5.0-5.3: <declare>(T,x)
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project7.0-7.7: <init-declare>(T,x,y)
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project9.0-9.5: =(x,y)
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project11.0-11.9: +(<cast>(x,T),y)
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project13.0-13.5: <declare>(T,x)
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project15.0-15.13: <init-declare>(T,y,+(z,q))
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project17.0-17.15: <error>
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project19.0-19.5: +(z,q)
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_AMBIG_GLR_OUTPUT],
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[+(z,q)
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<declare>(T,x)
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<init-declare>(T,x,y)
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project=(x,y)
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project+(<cast>(x,T),y)
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<OR>(<declare>(T,x),<cast>(x,T))
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<OR>(<init-declare>(T,y,+(z,q)),=(<cast>(y,T),+(z,q)))
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project<error>
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project+(z,q)
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_AMBIG_GLR_OUTPUT_WITH_LOC],
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[3.0-3.5: +(z,q)
390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project5.0-5.3: <declare>(T,x)
391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project7.0-7.7: <init-declare>(T,x,y)
392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project9.0-9.5: =(x,y)
393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project11.0-11.9: +(<cast>(x,T),y)
394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project13.0-13.5: <OR>(<declare>(T,x),<cast>(x,T))
395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project15.0-15.13: <OR>(<init-declare>(T,y,+(z,q)),=(<cast>(y,T),+(z,q)))
396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project17.0-17.15: <error>
397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project19.0-19.5: +(z,q)
398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_GLR_STDERR],
401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[syntax error
402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([_AT_VERBOSE_GLR_STDERR],
405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[[syntax error, unexpected ID, expecting '=' or '+' or ')'
406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])
407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ---------------------------------------------------- ##
409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Compile the grammar described in the documentation.  ##
410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ---------------------------------------------------- ##
411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Resolve ambiguity, impure, no locations])
413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([],
414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%dprec 1], [%dprec 2])
415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR)
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Resolve ambiguity, impure, locations])
420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([%locations],[%dprec 1],[%dprec 2])
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Resolve ambiguity, pure, no locations])
426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([%pure-parser],
427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%dprec 1], [%dprec 2])
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR)
430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Resolve ambiguity, pure, locations])
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([%pure-parser %locations],
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%dprec 1], [%dprec 2])
435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Merge conflicting parses, impure, no locations])
440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([],
441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%merge <stmtMerge>], [%merge <stmtMerge>])
442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR)
444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Merge conflicting parses, impure, locations])
447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([%locations],
448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%merge <stmtMerge>], [%merge <stmtMerge>])
449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Merge conflicting parses, pure, no locations])
454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([%pure-parser],
455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%merge <stmtMerge>], [%merge <stmtMerge>])
456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR)
458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Merge conflicting parses, pure, locations])
460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([%pure-parser %locations],
461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%merge <stmtMerge>],[%merge <stmtMerge>])
462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR)
464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations])
467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project_AT_TEST_GLR_CXXTYPES([%error-verbose],
468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		      [%merge <stmtMerge>], [%merge <stmtMerge>])
469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_PARSER_CHECK([[./types test-input]], 0,
470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project		_AT_AMBIG_GLR_OUTPUT, _AT_VERBOSE_GLR_STDERR)
471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectAT_CLEANUP
472