1# Bison Parser Headers. -*- Autotest -*- 2# Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc. 3 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 2, or (at your option) 7# any later version. 8 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13 14# You should have received a copy of the GNU General Public License 15# along with this program; if not, write to the Free Software 16# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 17# 02110-1301, USA. 18 19AT_BANNER([[Parser Headers.]]) 20 21 22## ---------------------- ## 23## %union and --defines. ## 24## ---------------------- ## 25 26 27AT_SETUP([%union and --defines]) 28 29AT_DATA([input.y], 30[%union 31{ 32 int integer; 33 char *string ; 34} 35%% 36exp: {}; 37]) 38 39AT_CHECK([bison --defines input.y]) 40 41AT_CLEANUP 42 43 44 45## --------------------- ## 46## Invalid CPP headers. ## 47## --------------------- ## 48 49# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE) 50# ------------------------------------- 51m4_define([AT_TEST_CPP_GUARD_H], 52[AT_SETUP([Invalid CPP guards: $1]) 53 54# Possibly create inner directories. 55dirname=`AS_DIRNAME([$1])` 56AS_MKDIR_P([$dirname]) 57 58AT_DATA_GRAMMAR([$1.y], 59[%{ 60#include <$1.h> 61void yyerror (const char *); 62int yylex (void); 63%} 64%% 65dummy:; 66%% 67#include <$1.h> 68]) 69 70AT_CHECK([bison --defines=$1.h --output=y.tab.c $1.y]) 71 72AT_COMPILE([y.tab.o], [-I. -c y.tab.c]) 73 74AT_CLEANUP 75]) 76 77AT_TEST_CPP_GUARD_H([input/input]) 78AT_TEST_CPP_GUARD_H([9foo]) 79 80 81 82## ---------------- ## 83## export YYLTYPE. ## 84## ---------------- ## 85 86 87AT_SETUP([export YYLTYPE]) 88 89AT_DATA_GRAMMAR([input.y], 90[%locations 91 92%name-prefix="my_" 93%{ 94#include <stdio.h> 95#include <stdlib.h> 96 97static int 98my_lex (void) 99{ 100 return EOF; 101} 102 103static void 104my_error (const char *msg) 105{ 106 fprintf (stderr, "%s\n", msg); 107} 108 109%} 110%% 111exp:; 112]) 113 114AT_CHECK([bison --defines -o input.c input.y]) 115 116# YYLTYPE should be defined, and MY_LLOC declared. 117AT_DATA([caller.c], 118[[#include "input.h" 119YYLTYPE *my_llocp = &my_lloc; 120 121int my_parse (void); 122 123int 124main (void) 125{ 126 return my_parse (); 127} 128]]) 129 130# Link and execute, just to make sure everything is fine (and in 131# particular, that MY_LLOC is indeed defined somewhere). 132AT_COMPILE([caller.o], [-c caller.c]) 133AT_COMPILE([input.o], [-c input.c]) 134AT_COMPILE([caller], [caller.o input.o]) 135AT_PARSER_CHECK([./caller]) 136 137AT_CLEANUP 138