Home | History | Annotate | Download | only in calc++
      1 #line 10196 "../../doc/bison.texi"
      2 %skeleton "lalr1.cc" /* -*- C++ -*- */
      3 %require "2.6.90.8-d4fe"
      4 %defines
      5 %define parser_class_name "calcxx_parser"
      6 #line 10214 "../../doc/bison.texi"
      7 %code requires {
      8 # include <string>
      9 class calcxx_driver;
     10 }
     11 #line 10227 "../../doc/bison.texi"
     12 // The parsing context.
     13 %parse-param { calcxx_driver& driver }
     14 %lex-param   { calcxx_driver& driver }
     15 #line 10240 "../../doc/bison.texi"
     16 %locations
     17 %initial-action
     18 {
     19   // Initialize the initial location.
     20   @$.begin.filename = @$.end.filename = &driver.file;
     21 };
     22 #line 10255 "../../doc/bison.texi"
     23 %debug
     24 %error-verbose
     25 #line 10265 "../../doc/bison.texi"
     26 // Symbols.
     27 %union
     28 {
     29   int          ival;
     30   std::string *sval;
     31 };
     32 #line 10280 "../../doc/bison.texi"
     33 %code {
     34 # include "calc++-driver.hh"
     35 }
     36 #line 10295 "../../doc/bison.texi"
     37 %token        END      0 "end of file"
     38 %token        ASSIGN     ":="
     39 %token <sval> IDENTIFIER "identifier"
     40 %token <ival> NUMBER     "number"
     41 %type  <ival> exp
     42 #line 10309 "../../doc/bison.texi"
     43 %printer    { yyoutput << *$$; } "identifier"
     44 %destructor { delete $$; } "identifier"
     45 
     46 %printer    { yyoutput << $$; } <ival>
     47 #line 10320 "../../doc/bison.texi"
     48 %%
     49 %start unit;
     50 unit: assignments exp  { driver.result = $2; };
     51 
     52 assignments:
     53   /* Nothing.  */        {}
     54 | assignments assignment {};
     55 
     56 assignment:
     57      "identifier" ":=" exp
     58        { driver.variables[*$1] = $3; delete $1; };
     59 
     60 %left '+' '-';
     61 %left '*' '/';
     62 exp: exp '+' exp   { $$ = $1 + $3; }
     63    | exp '-' exp   { $$ = $1 - $3; }
     64    | exp '*' exp   { $$ = $1 * $3; }
     65    | exp '/' exp   { $$ = $1 / $3; }
     66    | "identifier"  { $$ = driver.variables[*$1]; delete $1; }
     67    | "number"      { $$ = $1; };
     68 %%
     69 #line 10349 "../../doc/bison.texi"
     70 void
     71 yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l,
     72                           const std::string& m)
     73 {
     74   driver.error (l, m);
     75 }
     76