]> git.saurik.com Git - bison.git/blobdiff - examples/variant.yy
style: scope reduction in lalr.cc
[bison.git] / examples / variant.yy
index 25f476a5baa9dda70b8c9ee5955cc8890e8bf46f..fd551cc19ab299a9c5160f7e00f691f941fecdba 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2008-2012 Free Software Foundation, Inc.
+  Copyright (C) 2008-2013 Free Software Foundation, Inc.
 
   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
 */
 
 %debug
-%skeleton "lalr1.cc"
+%language "c++"
 %defines
 %define api.token.constructor
+%define api.value.type variant
 %define parse.assert
-%define variant
 %locations
 
 %code requires // *.hh
@@ -48,11 +48,17 @@ typedef std::list<std::string> strings_type;
   namespace std
   {
     std::ostream&
-    operator<< (std::ostream& o, const strings_type& s)
+    operator<< (std::ostream& o, const strings_type& ss)
     {
-      std::copy (s.begin (), s.end (),
-                 std::ostream_iterator<strings_type::value_type> (o, "\n"));
-      return o;
+      o << "(" << &ss << ") {";
+      const char *sep = "";
+      for (strings_type::const_iterator i = ss.begin(), end = ss.end();
+           i != end; ++i)
+        {
+          o << sep << *i;
+          sep = ", ";
+        }
+      return o << "}";
     }
   }
 
@@ -70,8 +76,7 @@ typedef std::list<std::string> strings_type;
 
 %token <::std::string> TEXT;
 %token <int> NUMBER;
-%printer { debug_stream () << $$; }
-   <int> <::std::string> <::std::list<std::string>>;
+%printer { yyoutput << $$; } <*>;
 %token END_OF_FILE 0;
 
 %type <::std::string> item;