OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
expression.hpp
Go to the documentation of this file.
1 /*=============================================================================
2  Adapted from boost spirit mini_c example.
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 #if !defined(EXPRESSION_HPP)
8 #define EXPRESSION_HPP
9 
11 // Spirit v2.5 allows you to suppress automatic generation
12 // of predefined terminals to speed up complation. With
13 // BOOST_SPIRIT_NO_PREDEFINED_TERMINALS defined, you are
14 // responsible in creating instances of the terminals that
15 // you need (e.g. see qi::uint_type uint_ below).
16 #define BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
17 
20 // Uncomment this if you want to enable debugging
21 // #define BOOST_SPIRIT_QI_DEBUG
23 
24 #include <boost/spirit/include/qi.hpp>
25 #include "ast.hpp"
26 #include "error_handler.hpp"
27 #include "skipper.hpp"
28 #include <vector>
29 
30 namespace client { namespace parser
31 {
32  namespace qi = boost::spirit::qi;
33  namespace ascii = boost::spirit::ascii;
34 
36  // The expression grammar
38  template <typename Iterator>
39  struct expression : qi::grammar<Iterator, ast::expression(), qi::locals<char>, skipper<Iterator> >
40  {
42 
43  qi::rule<Iterator, ast::expression(), qi::locals<char>, skipper<Iterator> >
47  ;
48 
49  qi::rule<Iterator, ast::operand(), qi::locals<char>, skipper<Iterator> >
51  ;
52 
53  qi::rule<Iterator, ast::function_call(), qi::locals<char>, skipper<Iterator> >
55  ;
56 
57  qi::rule<Iterator, std::list<ast::function_call_argument>(), qi::locals<char>, skipper<Iterator> >
59  ;
60 
61  qi::rule<Iterator, std::string(), qi::locals<char>, skipper<Iterator> >
63  ;
64 
65  qi::rule<Iterator, std::string(), qi::locals<char>, skipper<Iterator> >
67  ;
68 
69  qi::symbols<char, ast::optoken>
73  ;
74 
75  qi::symbols<char>
76  keywords
77  ;
78  };
79 }}
80 
81 #endif
qi::symbols< char, ast::optoken > logical_and_op
Definition: expression.hpp:70
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > logical_or_expr
Definition: expression.hpp:44
qi::rule< Iterator, ast::operand(), qi::locals< char >, skipper< Iterator > > constant_expr
Definition: expression.hpp:50
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > logical_and_expr
Definition: expression.hpp:44
qi::rule< Iterator, std::list< ast::function_call_argument >), qi::locals< char >, skipper< Iterator > > argument_list
Definition: expression.hpp:59
qi::symbols< char, ast::optoken > equality_op
Definition: expression.hpp:70
qi::symbols< char, ast::optoken > multiplicative_op
Definition: expression.hpp:70
expression(error_handler< Iterator > &error_handler)
qi::rule< Iterator, std::string(), qi::locals< char >, skipper< Iterator > > quoted_string
Definition: expression.hpp:67
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > multiplicative_expr
Definition: expression.hpp:44
qi::symbols< char > keywords
Definition: expression.hpp:77
qi::rule< Iterator, std::string(), qi::locals< char >, skipper< Iterator > > identifier
Definition: expression.hpp:63
qi::symbols< char, ast::optoken > unary_op
Definition: expression.hpp:70
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > additive_expr
Definition: expression.hpp:44
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > relational_expr
Definition: expression.hpp:44
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > expr
Definition: expression.hpp:44
qi::rule< Iterator, ast::operand(), qi::locals< char >, skipper< Iterator > > unary_expr
Definition: expression.hpp:50
qi::rule< Iterator, ast::function_call(), qi::locals< char >, skipper< Iterator > > function_call
Definition: expression.hpp:55
qi::symbols< char, ast::optoken > additive_op
Definition: expression.hpp:70
qi::symbols< char, ast::optoken > logical_or_op
Definition: expression.hpp:70
qi::symbols< char, ast::optoken > relational_op
Definition: expression.hpp:70
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > equality_expr
Definition: expression.hpp:44
qi::rule< Iterator, ast::operand(), qi::locals< char >, skipper< Iterator > > primary_expr
Definition: expression.hpp:50