1// Copyright (c) 2001-2011 Hartmut Kaiser
2// Copyright (c) 2011 Michael Caisse
3//
4// Distributed under the Boost Software License, Version 1.0. (See accompanying
5// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7#include <boost/spirit/include/qi.hpp>
8
9namespace qi = boost::spirit::qi;
10
11template <typename T>
12struct german_real_policies : qi::real_policies<T>
13{
14 template <typename Iterator>
15 static bool parse_dot(Iterator& first, Iterator const& last)
16 {
17 if (first == last || *first != ',')
18 return false;
19 ++first;
20 return true;
21 }
22};
23
24qi::real_parser<double, german_real_policies<double> > const german_double;
25
26///////////////////////////////////////////////////////////////////////////////
27int main()
28{
29 std::string input("123,456");
30 std::string::iterator begin = input.begin();
31 std::string::iterator end = input.end();
32
33 double value = 0;
34 if (!qi::parse(first&: begin, last: end, expr: german_double, attr&: value))
35 {
36 std::cout << "-------------------------------- \n";
37 std::cout << "Parsing failed\n";
38 std::cout << "-------------------------------- \n";
39 }
40 else
41 {
42 std::cout << "-------------------------------- \n";
43 std::cout << "Parsing succeeded, got: " << value << "\n";
44 std::cout << "---------------------------------\n";
45 }
46 return 0;
47}
48
49

source code of boost/libs/spirit/example/qi/german_floating_point.cpp