X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/2c3b392a9ad550ca87f6e5172072cd0b70b15f1d..3c5362b825a9d01eafe257943b7faad92ea43a05:/tests/cxx-type.at?ds=sidebyside diff --git a/tests/cxx-type.at b/tests/cxx-type.at index dcc0810c..9daaa44e 100644 --- a/tests/cxx-type.at +++ b/tests/cxx-type.at @@ -1,20 +1,19 @@ # Checking GLR Parsing. -*- Autotest -*- -# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008-2009 Free +# Software Foundation, Inc. -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - +# # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . AT_BANNER([[C++ Type Syntax (GLR).]]) @@ -36,17 +35,17 @@ $1 #include union Node { struct { - int type; + int isNterm; int parents; - } node_info; + } nodeInfo; struct { - int type; /* 1 */ + int isNterm; /* 1 */ int parents; char const *form; union Node *children[3]; } nterm; struct { - int type; /* 0 */ + int isNterm; /* 0 */ int parents; char *text; } term; @@ -93,35 +92,35 @@ $1 prog : | prog stmt { - char *output;]AT_LOCATION_IF([ + char *output;]AT_LOCATION_IF([ printf ("%d.%d-%d.%d: ", @2.first_line, @2.first_column, @2.last_line, @2.last_column);])[ - output = node_to_string (]$[2); - printf ("%s\n", output); - free (output); - free_node (]$[2); + output = node_to_string (]$[2); + printf ("%s\n", output); + free (output); + free_node (]$[2); } ; stmt : expr ';' $2 { $$ = ]$[1; } | decl $3 - | error ';' { $$ = new_nterm ("", 0, 0, 0); } + | error ';' { $$ = new_nterm ("", 0, 0, 0); } | '@' { YYACCEPT; } ; expr : ID | TYPENAME '(' expr ')' - { $$ = new_nterm ("(%s,%s)", ]$[3, ]$[1, 0); } - | expr '+' expr { $$ = new_nterm ("+(%s,%s)", ]$[1, ]$[3, 0); } + { $$ = new_nterm ("(%s,%s)", ]$[3, ]$[1, 0); } + | expr '+' expr { $$ = new_nterm ("+(%s,%s)", ]$[1, ]$[3, 0); } | expr '=' expr { $$ = new_nterm ("=(%s,%s)", ]$[1, ]$[3, 0); } ; decl : TYPENAME declarator ';' - { $$ = new_nterm ("(%s,%s)", ]$[1, ]$[2, 0); } + { $$ = new_nterm ("(%s,%s)", ]$[1, ]$[2, 0); } | TYPENAME declarator '=' expr ';' - { $$ = new_nterm ("(%s,%s,%s)", ]$[1, - ]$[2, ]$[4); } + { $$ = new_nterm ("(%s,%s,%s)", ]$[1, + ]$[2, ]$[4); } ; declarator : ID @@ -155,12 +154,16 @@ yylex (LEX_PARAMETERS) static int colNum = 0; #if YYPURE +# undef yylloc # define yylloc (*llocp) +# undef yylval # define yylval (*lvalp) #endif while (1) { + if (feof (stdin)) + abort (); c = getchar (); switch (c) { @@ -200,13 +203,13 @@ yylex (LEX_PARAMETERS) ungetc (c, stdin); buffer[i++] = 0; tok = isupper ((unsigned char) buffer[0]) ? TYPENAME : ID; - yylval = new_term (strcpy ((char *) malloc (i), buffer)); + yylval = new_term (strcpy ((char *) malloc (i), buffer)); } else { colNum += 1; tok = c; - yylval = 0; + yylval = 0; } #if YYLSP_NEEDED yylloc.last_column = colNum-1; @@ -231,27 +234,27 @@ yyerror (ERROR_PARAMETERS) static Node * new_nterm (char const *form, Node *child0, Node *child1, Node *child2) { - Node *node = malloc (sizeof (Node)); - node->nterm.type = 1; + Node *node = (Node *) malloc (sizeof (Node)); + node->nterm.isNterm = 1; node->nterm.parents = 0; node->nterm.form = form; node->nterm.children[0] = child0; if (child0) - child0->node_info.parents += 1; + child0->nodeInfo.parents += 1; node->nterm.children[1] = child1; if (child1) - child1->node_info.parents += 1; + child1->nodeInfo.parents += 1; node->nterm.children[2] = child2; if (child2) - child2->node_info.parents += 1; + child2->nodeInfo.parents += 1; return node; } static Node * new_term (char *text) { - Node *node = malloc (sizeof (Node)); - node->term.type = 0; + Node *node = (Node *) malloc (sizeof (Node)); + node->term.isNterm = 0; node->term.parents = 0; node->term.text = text; return node; @@ -262,11 +265,11 @@ free_node (Node *node) { if (!node) return; - node->node_info.parents -= 1; + node->nodeInfo.parents -= 1; /* Free only if 0 (last parent) or -1 (no parents). */ - if (node->node_info.parents > 0) + if (node->nodeInfo.parents > 0) return; - if (node->node_info.type == 1) + if (node->nodeInfo.isNterm == 1) { free_node (node->nterm.children[0]); free_node (node->nterm.children[1]); @@ -286,16 +289,16 @@ node_to_string (Node *node) char *buffer; if (!node) { - buffer = malloc (1); + buffer = (char *) malloc (1); buffer[0] = 0; } - else if (node->node_info.type == 1) + else if (node->nodeInfo.isNterm == 1) { child0 = node_to_string (node->nterm.children[0]); child1 = node_to_string (node->nterm.children[1]); child2 = node_to_string (node->nterm.children[2]); - buffer = malloc (strlen (node->nterm.form) + strlen (child0) - + strlen (child1) + strlen (child2) + 1); + buffer = (char *) malloc (strlen (node->nterm.form) + strlen (child0) + + strlen (child1) + strlen (child2) + 1); sprintf (buffer, node->nterm.form, child0, child1, child2); free (child0); free (child1); @@ -342,13 +345,13 @@ z + q; This is total garbage, but it should be ignored. ]]) -AT_CHECK([bison -o types.c types.y], 0, [], ignore) +AT_BISON_CHECK([-o types.c types.y], 0, [], ignore) AT_COMPILE([types]) AT_BISON_OPTION_POPDEFS ]) m4_define([_AT_RESOLVED_GLR_OUTPUT], -[[+(z,q) +[[[+(z,q) (T,x) (T,x,y) =(x,y) @@ -357,10 +360,10 @@ m4_define([_AT_RESOLVED_GLR_OUTPUT], (T,y,+(z,q)) +(z,q) -]]) +]]]) m4_define([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], -[[3.0-3.5: +(z,q) +[[[3.0-3.5: +(z,q) 5.0-5.3: (T,x) 7.0-7.7: (T,x,y) 9.0-9.5: =(x,y) @@ -369,10 +372,10 @@ m4_define([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], 15.0-15.13: (T,y,+(z,q)) 17.0-17.15: 19.0-19.5: +(z,q) -]]) +]]]) m4_define([_AT_AMBIG_GLR_OUTPUT], -[[+(z,q) +[[[+(z,q) (T,x) (T,x,y) =(x,y) @@ -381,10 +384,10 @@ m4_define([_AT_AMBIG_GLR_OUTPUT], ((T,y,+(z,q)),=((y,T),+(z,q))) +(z,q) -]]) +]]]) m4_define([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], -[[3.0-3.5: +(z,q) +[[[3.0-3.5: +(z,q) 5.0-5.3: (T,x) 7.0-7.7: (T,x,y) 9.0-9.5: =(x,y) @@ -393,15 +396,15 @@ m4_define([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], 15.0-15.13: ((T,y,+(z,q)),=((y,T),+(z,q))) 17.0-17.15: 19.0-19.5: +(z,q) -]]) +]]]) m4_define([_AT_GLR_STDERR], -[[syntax error -]]) +[[[syntax error +]]]) m4_define([_AT_VERBOSE_GLR_STDERR], -[[syntax error, unexpected ID, expecting '=' or '+' or ')' -]]) +[[[syntax error, unexpected ID, expecting '=' or '+' or ')' +]]]) ## ---------------------------------------------------- ## ## Compile the grammar described in the documentation. ## @@ -409,61 +412,61 @@ m4_define([_AT_VERBOSE_GLR_STDERR], AT_SETUP([GLR: Resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CXXTYPES([], - [%dprec 1], [%dprec 2]) + [%dprec 1], [%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) + _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, impure, locations]) _AT_TEST_GLR_CXXTYPES([%locations],[%dprec 1],[%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + _AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, no locations]) -_AT_TEST_GLR_CXXTYPES([%pure-parser], - [%dprec 1], [%dprec 2]) +_AT_TEST_GLR_CXXTYPES([%define api.pure], + [%dprec 1], [%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) + _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, locations]) -_AT_TEST_GLR_CXXTYPES([%pure-parser %locations], - [%dprec 1], [%dprec 2]) +_AT_TEST_GLR_CXXTYPES([%define api.pure %locations], + [%dprec 1], [%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + _AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, impure, no locations]) _AT_TEST_GLR_CXXTYPES([], - [%merge ], [%merge ]) + [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, impure, locations]) _AT_TEST_GLR_CXXTYPES([%locations], - [%merge ], [%merge ]) + [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, pure, no locations]) -_AT_TEST_GLR_CXXTYPES([%pure-parser], - [%merge ], [%merge ]) +_AT_TEST_GLR_CXXTYPES([%define api.pure], + [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, pure, locations]) -_AT_TEST_GLR_CXXTYPES([%pure-parser %locations], - [%merge ],[%merge ]) +_AT_TEST_GLR_CXXTYPES([%define api.pure %locations], + [%merge ],[%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CXXTYPES([%error-verbose], - [%merge ], [%merge ]) + [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT, _AT_VERBOSE_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT, _AT_VERBOSE_GLR_STDERR) AT_CLEANUP