/[bison]/bison/tests/calc.at
ViewVC logotype

Diff of /bison/tests/calc.at

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.53 by akim, Thu Feb 20 08:14:27 2003 UTC revision 1.54 by akim, Sun Mar 2 11:14:07 2003 UTC
# Line 54  typedef int value; Line 54  typedef int value;
54    
55  static value global_result = 0;  static value global_result = 0;
56  static int global_count = 0;  static int global_count = 0;
   
 ]AT_LALR1_CC_IF([typedef yy::Location YYLTYPE;])[  
57  %}  %}
58    
59  /* Exercise %union. */  /* Exercise %union. */
# Line 66  static int global_count = 0; Line 64  static int global_count = 0;
64    
65  %{  %{
66  static int power (int base, int exponent);  static int power (int base, int exponent);
67  ]AT_LALR1_CC_IF([], [  ]AT_LALR1_CC_IF([typedef yy::Location YYLTYPE;],
68  /* yyerror receives the location if:  [/* yyerror receives the location if:
69     - %location & %pure & %glr     - %location & %pure & %glr
70     - %location & %pure & %yacc & %parse-param. */     - %location & %pure & %yacc & %parse-param. */
71  static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])  static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
# Line 143  yy::Parser::error_ () Line 141  yy::Parser::error_ ()
141  int  int
142  yyparse (void)  yyparse (void)
143  {  {
144    yy::Parser parser = yy::Parser (!!YYDEBUG[]AT_LOCATION_IF([,    yy::Parser parser (!!YYDEBUG[]AT_LOCATION_IF([, yy::Location::Location ()]));
                                   yy::Location::Location ()]));  
145    return parser.parse ();    return parser.parse ();
146  }  }
147  ],  ],
# Line 426  AT_CHECK([cat stderr], 0, [expout]) Line 423  AT_CHECK([cat stderr], 0, [expout])
423  ])  ])
424    
425    
 # AT_CALC_PUSHDEFS($1, $2, [BISON-OPTIONS])  
 # -----------------------------------------  
 # This macro works around the impossibility to define macros  
 # inside macros, because issuing `[$1]' is not possible in M4 :(.  
 # This sucks hard, GNU M4 should really provide M5 like $$1.  
 m4_define([AT_CHECK_PUSHDEFS],  
 [m4_if([$1$2], $[1]$[2], [],  
        [m4_fatal([$0: Invalid arguments: $@])])dnl  
 m4_pushdef([AT_LALR1_CC_IF],  
 [m4_bmatch([$3], ["lalr1.cc"], [$1], [$2])])  
 m4_pushdef([AT_GLR_IF],  
 [m4_bmatch([$3], [%glr-parser], [$1], [$2])])  
 # Using yacc.c?  
 m4_pushdef([AT_YACC_IF],  
 [m4_bmatch([$3], [%glr-parser\|%skeleton], [$2], [$1])])  
 m4_pushdef([AT_PARAM_IF],  
 [m4_bmatch([$3], [%parse-param], [$1], [$2])])  
 m4_pushdef([AT_LOCATION_IF],  
 [m4_bmatch([$3], [%locations], [$1], [$2])])  
 m4_pushdef([AT_PURE_IF],  
 [m4_bmatch([$3], [%pure-parser], [$1], [$2])])  
 m4_pushdef([AT_PURE_AND_LOC_IF],  
 [m4_bmatch([$3], [%locations.*%pure-parser\|%pure-parser.*%locations],  
            [$1], [$2])])  
 m4_pushdef([AT_GLR_OR_PARAM_IF],  
 [m4_bmatch([$3], [%glr-parser\|%parse-param], [$1], [$2])])  
   
 # yyerror receives the location if %location & %pure & (%glr or %parse-param).  
 m4_pushdef([AT_YYERROR_ARG_LOC_IF],  
 [AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])],  
                     [$2])])  
 # yyerror always sees the locations (when activated), except if  
 # yacc & pure & !param.  
 m4_pushdef([AT_YYERROR_SEES_LOC_IF],  
 [AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])],  
                                         [$1])],  
                             [$1])],  
                 [$2])])  
   
 # The interface is pure: either because %pure-parser, or because we  
 # are using the C++ parsers.  
 m4_pushdef([AT_PURE_LEX_IF],  
 [AT_PURE_IF([$1],  
             [AT_LALR1_CC_IF([$1], [$2])])])  
   
 AT_PURE_LEX_IF(  
 [m4_pushdef([AT_LOC], [(*yylloc)])  
  m4_pushdef([AT_VAL], [(*yylval)])  
  m4_pushdef([AT_LEX_FORMALS],  
             [YYSTYPE *yylval[]AT_LOCATION_IF([, YYLTYPE *yylloc])])  
  m4_pushdef([AT_LEX_ARGS],  
             [yylval[]AT_LOCATION_IF([, yylloc])])  
  m4_pushdef([AT_USE_LEX_ARGS],  
             [(void) yylval;AT_LOCATION_IF([(void) yylloc])])  
  m4_pushdef([AT_LEX_PRE_FORMALS],  
             [AT_LEX_FORMALS, ])  
  m4_pushdef([AT_LEX_PRE_ARGS],  
             [AT_LEX_ARGS, ])  
 ],  
 [m4_pushdef([AT_LOC], [(yylloc)])  
  m4_pushdef([AT_VAL], [(yylval)])  
  m4_pushdef([AT_LEX_FORMALS],     [void])  
  m4_pushdef([AT_LEX_ARGS],        [])  
  m4_pushdef([AT_USE_LEX_ARGS],    [])  
  m4_pushdef([AT_LEX_PRE_FORMALS], [])  
  m4_pushdef([AT_LEX_PRE_ARGS],    [])  
 ])  
 ])# AT_CALC_PUSHDEFS  
   
   
 # AT_CALC_POPDEFS  
 # ---------------  
 m4_define([AT_CHECK_POPDEFS],  
 [m4_popdef([AT_LEX_PRE_ARGS])  
 m4_popdef([AT_LEX_PRE_FORMALS])  
 m4_popdef([AT_USE_LEX_ARGS])  
 m4_popdef([AT_LEX_ARGS])  
 m4_popdef([AT_LEX_FORMALS])  
 m4_popdef([AT_VAL])  
 m4_popdef([AT_LOC])  
 m4_popdef([AT_PURE_LEX_IF])  
 m4_popdef([AT_YYERROR_SEES_LOC_IF])  
 m4_popdef([AT_YYERROR_ARG_LOC_IF])  
 m4_popdef([AT_GLR_OR_PARAM_IF])  
 m4_popdef([AT_PURE_AND_LOC_IF])  
 m4_popdef([AT_LOCATION_IF])  
 m4_popdef([AT_PARAM_IF])  
 m4_popdef([AT_YACC_IF])  
 m4_popdef([AT_GLR_IF])  
 m4_popdef([AT_LALR1_CC_IF])  
 ])  
   
   
   
426  # AT_CHECK_CALC([BISON-OPTIONS])  # AT_CHECK_CALC([BISON-OPTIONS])
427  # ------------------------------  # ------------------------------
428  # Start a testing chunk which compiles `calc' grammar with  # Start a testing chunk which compiles `calc' grammar with
# Line 528  m4_define([AT_CHECK_CALC], Line 431  m4_define([AT_CHECK_CALC],
431  [# We use integers to avoid dependencies upon the precision of doubles.  [# We use integers to avoid dependencies upon the precision of doubles.
432  AT_SETUP([Calculator $1])  AT_SETUP([Calculator $1])
433    
434  AT_CHECK_PUSHDEFS($[1], $[2], [$1])  AT_BISON_OPTION_PUSHDEFS([$1])
435    
436  AT_DATA_CALC_Y([$1])  AT_DATA_CALC_Y([$1])
437    
438  # Specify the output files to avoid problems on different file systems.  # Specify the output files to avoid problems on different file systems.
439  AT_CHECK([bison -o calc.c calc.y],  AT_CHECK([bison -o calc.c calc.y])
          [0], [], [])  
440    
441  AT_LALR1_CC_IF(  AT_LALR1_CC_IF([AT_COMPILE_CXX([calc])],
442  [AT_CHECK([$CXX --version || exit 77], 0, ignore, ignore)                 [AT_COMPILE([calc])])
 AT_COMPILE_CXX([calc])],  
 [AT_COMPILE([calc])])  
443    
444  # Test the priorities.  # Test the priorities.
445  _AT_CHECK_CALC([$1],  _AT_CHECK_CALC([$1],
# Line 606  calc: error: 4444 != 1]) Line 506  calc: error: 4444 != 1])
506  _AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [64],  _AT_CHECK_CALC_ERROR([$1], [0], [(!) + (0 0) = 1], [64],
507  [1.9: syntax error, unexpected "number"  [1.9: syntax error, unexpected "number"
508  calc: error: 2222 != 1])  calc: error: 2222 != 1])
509  AT_CHECK_POPDEFS  AT_BISON_OPTION_POPDEFS
510    
511  AT_CLEANUP  AT_CLEANUP
512  ])# AT_CHECK_CALC  ])# AT_CHECK_CALC

Legend:
Removed from v.1.53  
changed lines
  Added in v.1.54

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26