1/*=============================================================================
2 Copyright (c) 2001-2014 Joel de Guzman
3 Copyright (c) 2013-2014 Agustin Berge
4
5 Distributed under the Boost Software License, Version 1.0. (See accompanying
6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7=============================================================================*/
8///////////////////////////////////////////////////////////////////////////////
9//
10// A Calculator example demonstrating generation of AST. The AST,
11// once created, is traversed, 1) To print its contents and
12// 2) To evaluate the result.
13//
14// [ JDG April 28, 2008 ] For BoostCon 2008
15// [ JDG February 18, 2011 ] Pure attributes. No semantic actions.
16// [ JDG January 9, 2013 ] Spirit X3
17//
18///////////////////////////////////////////////////////////////////////////////
19
20#include "grammar.hpp"
21
22namespace client
23{
24 ///////////////////////////////////////////////////////////////////////////////
25 // The calculator grammar
26 ///////////////////////////////////////////////////////////////////////////////
27 namespace calculator_grammar
28 {
29 using x3::uint_;
30 using x3::char_;
31
32 x3::rule<class expression, ast::program> const expression("expression");
33 x3::rule<class term, ast::program> const term("term");
34 x3::rule<class factor, ast::operand> const factor("factor");
35
36 auto const expression_def =
37 term
38 >> *( (char_('+') >> term)
39 | (char_('-') >> term)
40 )
41 ;
42
43 auto const term_def =
44 factor
45 >> *( (char_('*') >> factor)
46 | (char_('/') >> factor)
47 )
48 ;
49
50 auto const factor_def =
51 uint_
52 | '(' >> expression >> ')'
53 | (char_('-') >> factor)
54 | (char_('+') >> factor)
55 ;
56
57 BOOST_SPIRIT_DEFINE(
58 expression
59 , term
60 , factor
61 );
62
63 parser_type calculator()
64 {
65 return expression;
66 }
67 }
68}

source code of boost/libs/spirit/example/x3/calc/calc4c/grammar.cpp