OPAL (Object Oriented Parallel Accelerator Library) 2022.1
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
18
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
30namespace 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>
77 ;
78 };
79}}
80
81#endif
boost::variant< nil, bool, unsigned int, double, identifier, boost::recursive_wrapper< unary >, boost::recursive_wrapper< function_call >, boost::recursive_wrapper< expression > > operand
Definition: ast.hpp:53
qi::symbols< char > keywords
Definition: expression.hpp:77
qi::symbols< char, ast::optoken > unary_op
Definition: expression.hpp:73
qi::symbols< char, ast::optoken > multiplicative_op
Definition: expression.hpp:72
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > additive_expr
Definition: expression.hpp:46
qi::symbols< char, ast::optoken > logical_and_op
Definition: expression.hpp:70
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > relational_expr
Definition: expression.hpp:44
qi::rule< Iterator, std::string(), qi::locals< char >, skipper< Iterator > > quoted_string
Definition: expression.hpp:67
qi::symbols< char, ast::optoken > relational_op
Definition: expression.hpp:71
qi::symbols< char, ast::optoken > additive_op
Definition: expression.hpp:72
qi::symbols< char, ast::optoken > logical_or_op
Definition: expression.hpp:70
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > logical_and_expr
Definition: expression.hpp:45
expression(error_handler< Iterator > &error_handler)
qi::rule< Iterator, ast::operand(), qi::locals< char >, skipper< Iterator > > unary_expr
Definition: expression.hpp:50
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > equality_expr
Definition: expression.hpp:44
qi::rule< Iterator, ast::function_call(), qi::locals< char >, skipper< Iterator > > function_call
Definition: expression.hpp:55
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 > > constant_expr
Definition: expression.hpp:51
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > multiplicative_expr
Definition: expression.hpp:47
qi::symbols< char, ast::optoken > equality_op
Definition: expression.hpp:71
qi::rule< Iterator, ast::operand(), qi::locals< char >, skipper< Iterator > > primary_expr
Definition: expression.hpp:50
qi::rule< Iterator, ast::expression(), qi::locals< char >, skipper< Iterator > > logical_or_expr
Definition: expression.hpp:45
qi::rule< Iterator, std::list< ast::function_call_argument >(), qi::locals< char >, skipper< Iterator > > argument_list
Definition: expression.hpp:59
qi::rule< Iterator, std::string(), qi::locals< char >, skipper< Iterator > > identifier
Definition: expression.hpp:63