Index: bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/calc++-parser.yy |
=================================================================== |
--- bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/calc++-parser.yy (revision 0) |
+++ bison/src/bison/2.4.1/bison-2.4.1-src/examples/calc++/calc++-parser.yy (revision 0) |
@@ -0,0 +1,74 @@ |
+#line 8420 "../../doc/bison.texinfo" |
+%skeleton "lalr1.cc" /* -*- C++ -*- */ |
+%require "2.4.1" |
+%defines |
+%define parser_class_name "calcxx_parser" |
+#line 8438 "../../doc/bison.texinfo" |
+%code requires { |
+# include <string> |
+class calcxx_driver; |
+} |
+#line 8451 "../../doc/bison.texinfo" |
+// The parsing context. |
+%parse-param { calcxx_driver& driver } |
+%lex-param { calcxx_driver& driver } |
+#line 8464 "../../doc/bison.texinfo" |
+%locations |
+%initial-action |
+{ |
+ // Initialize the initial location. |
+ @$.begin.filename = @$.end.filename = &driver.file; |
+}; |
+#line 8478 "../../doc/bison.texinfo" |
+%debug |
+%error-verbose |
+#line 8488 "../../doc/bison.texinfo" |
+// Symbols. |
+%union |
+{ |
+ int ival; |
+ std::string *sval; |
+}; |
+#line 8503 "../../doc/bison.texinfo" |
+%code { |
+# include "calc++-driver.hh" |
+} |
+#line 8518 "../../doc/bison.texinfo" |
+%token END 0 "end of file" |
+%token ASSIGN ":=" |
+%token <sval> IDENTIFIER "identifier" |
+%token <ival> NUMBER "number" |
+%type <ival> exp |
+#line 8532 "../../doc/bison.texinfo" |
+%printer { debug_stream () << *$$; } "identifier" |
+%destructor { delete $$; } "identifier" |
+ |
+%printer { debug_stream () << $$; } <ival> |
+#line 8543 "../../doc/bison.texinfo" |
+%% |
+%start unit; |
+unit: assignments exp { driver.result = $2; }; |
+ |
+assignments: assignments assignment {} |
+ | /* Nothing. */ {}; |
+ |
+assignment: |
+ "identifier" ":=" exp |
+ { driver.variables[*$1] = $3; delete $1; }; |
+ |
+%left '+' '-'; |
+%left '*' '/'; |
+exp: exp '+' exp { $$ = $1 + $3; } |
+ | exp '-' exp { $$ = $1 - $3; } |
+ | exp '*' exp { $$ = $1 * $3; } |
+ | exp '/' exp { $$ = $1 / $3; } |
+ | "identifier" { $$ = driver.variables[*$1]; delete $1; } |
+ | "number" { $$ = $1; }; |
+%% |
+#line 8571 "../../doc/bison.texinfo" |
+void |
+yy::calcxx_parser::error (const yy::calcxx_parser::location_type& l, |
+ const std::string& m) |
+{ |
+ driver.error (l, m); |
+} |