Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r71269 - trunk/libs/spirit/example/qi
From: hartmut.kaiser_at_[hidden]
Date: 2011-04-15 07:19:45


Author: hkaiser
Date: 2011-04-15 07:19:43 EDT (Fri, 15 Apr 2011)
New Revision: 71269
URL: http://svn.boost.org/trac/boost/changeset/71269

Log:
Spirit: fixing/adding examples
Added:
   trunk/libs/spirit/example/qi/german_floating_point.cpp (contents, props changed)
Text files modified:
   trunk/libs/spirit/example/qi/calc_utree_ast.cpp | 4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)

Modified: trunk/libs/spirit/example/qi/calc_utree_ast.cpp
==============================================================================
--- trunk/libs/spirit/example/qi/calc_utree_ast.cpp (original)
+++ trunk/libs/spirit/example/qi/calc_utree_ast.cpp 2011-04-15 07:19:43 EDT (Fri, 15 Apr 2011)
@@ -35,7 +35,7 @@
 
     struct expr
     {
- template <typename T1, typename T2>
+ template <typename T1, typename T2 = void>
         struct result { typedef void type; };
 
         expr(char op) : op(op) {}
@@ -58,7 +58,7 @@
 
     struct negate_expr
     {
- template <typename T1, typename T2>
+ template <typename T1, typename T2 = void>
         struct result { typedef void type; };
 
         void operator()(spirit::utree& expr, spirit::utree const& rhs) const

Added: trunk/libs/spirit/example/qi/german_floating_point.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/spirit/example/qi/german_floating_point.cpp 2011-04-15 07:19:43 EDT (Fri, 15 Apr 2011)
@@ -0,0 +1,48 @@
+// Copyright (c) 2001-2011 Hartmut Kaiser
+// Copyright (c) 2011 Michael Caisse
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/spirit/include/qi.hpp>
+
+namespace qi = boost::spirit::qi;
+
+template <typename T>
+struct german_real_policies : qi::real_policies<T>
+{
+ template <typename Iterator>
+ static bool parse_dot(Iterator& first, Iterator const& last)
+ {
+ if (first == last || *first != ',')
+ return false;
+ ++first;
+ return true;
+ }
+};
+
+qi::real_parser<double, german_real_policies<double> > const german_double;
+
+///////////////////////////////////////////////////////////////////////////////
+int main()
+{
+ std::string input("123,456");
+ std::string::iterator begin = input.begin();
+ std::string::iterator end = input.end();
+
+ double value = 0;
+ if (!qi::parse(begin, end, german_double, value))
+ {
+ std::cout << "-------------------------------- \n";
+ std::cout << "Parsing failed\n";
+ std::cout << "-------------------------------- \n";
+ }
+ else
+ {
+ std::cout << "-------------------------------- \n";
+ std::cout << "Parsing succeeded, got: " << value << "\n";
+ std::cout << "---------------------------------\n";
+ }
+ return 0;
+}
+


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk