Loading [MathJax]/extensions/tex2jax.js
Go to the documentation of this file.
11 #ifndef JOBOPTIONSVC_GRAMMAR_H_
12 #define JOBOPTIONSVC_GRAMMAR_H_
22 #include <boost/phoenix/core.hpp>
23 #include <boost/phoenix/fusion.hpp>
24 #include <boost/phoenix/operator.hpp>
25 #include <boost/phoenix/stl.hpp>
26 #if ( BOOST_VERSION >= 187000 ) && ( BOOST_VERSION < 188000 )
27 # define BOOST_ALLOW_DEPRECATED_HEADERS
29 #include <boost/spirit/include/qi.hpp>
30 #undef BOOST_ALLOW_DEPRECATED_HEADERS
31 #include <boost/spirit/repository/include/qi_confix.hpp>
32 #include <boost/spirit/repository/include/qi_iter_pos.hpp>
44 namespace sp = boost::spirit;
45 namespace ph = boost::phoenix;
46 namespace qi = sp::qi;
47 namespace enc = sp::ascii;
48 namespace rep = sp::repository;
52 template <
typename Iterator>
55 comments = enc::space | rep::confix(
"/*",
"*/" )[*( qi::char_ -
"*/" )] |
56 rep::confix(
"//", ( sp::eol | sp::eoi ) )[*( qi::char_ - ( sp::eol | sp::eoi ) )];
61 template <
typename Iterator,
typename Skipper>
62 struct StringGrammar : qi::grammar<Iterator, std::string(), qi::locals<char>, Skipper> {
68 quote = enc::char_( qi::_r1 );
71 *( ( enc::char_(
'\\' ) >>
quote( qi::_a ) )[qi::_val += qi::_a] |
72 ( enc::char_[qi::_val += qi::_1] -
quote( qi::_a ) ) ) >>
82 template <
typename Iterator,
typename Skipper>
90 str = -qi::lit(
"::" )[qi::_val +=
"::"] >>
inner[qi::_val += qi::_1] >>
91 *( qi::lit(
"::" ) >>
inner[qi::_val += (
"::" + qi::_1 )] );
92 inner = qi::alpha >> *( qi::alnum | qi::char_(
'_' ) );
98 ph::function<NodeOperations>
op;
101 template <
typename Iterator,
typename Skipper>
107 boolean = enc::no_case[qi::lit(
"true" )[qi::_val =
true] | qi::lit(
"false" )[qi::_val =
false]];
113 template <
typename Iterator,
typename Skipper>
119 real = qi::raw[qi::double_][
op( qi::_val, qi::_1 )][
op( qi::_val,
Node::kReal )] >> -qi::char_(
'L' ) >>
120 -( -qi::char_(
'*' ) >>
gunit[
op( qi::_val, qi::_1 )] );
125 ph::function<NodeOperations>
op;
128 template <
typename Iterator,
typename Skipper>
133 unit = rep::qi::iter_pos[
op( qi::_val, qi::_1 )] >>
val[
op( qi::_val, qi::_1 )] >> -qi::lit(
'*' ) >>
134 gunit[
op( qi::_val, qi::_1 )] >> qi::lit(
'=' ) >>
142 ph::function<NodeOperations>
op;
145 template <
typename Iterator,
typename Skipper>
151 qi::eol )[*( qi::char_[qi::_a += qi::_1] - qi::eol )][
op( qi::_val,
Node::kShell )][
op( qi::_val, qi::_a )];
153 condition )[qi::_val = qi::_1][
op( qi::_val, qi::_a )];
158 *
statement[
op( qi::_b, qi::_1 )] )[
op( qi::_val, qi::_b )] >>
169 value[
op( qi::_val, qi::_1 )] >>
';';
170 property = rep::qi::iter_pos[
op( qi::_val, qi::_1 )] >>
173 oper = rep::qi::iter_pos[
op( qi::_val, qi::_1 )] >>
179 enc::char_(
'(' )[qi::_val =
')'] | enc::char_(
'[' )[qi::_val =
']'] | enc::char_(
'{' )[qi::_val =
'}'];
183 map_value = ( enc::char_(
'{' ) >> -(
pair[
op( qi::_val, qi::_1 )] %
',' ) >>
190 qi::rule<
Iterator,
Node(),
Skipper>
file,
include,
assign,
property,
property_ref,
oper,
map_value,
pair_value,
202 ph::function<NodeOperations>
op;
208 #endif // JOBOPTIONSVC_GRAMMAR_H_
qi::rule< Iterator, Node(), Skipper > val
qi::rule< Iterator, Node(), Skipper > units
qi::rule< Iterator, char()> begin_quote
IdentifierGrammar< Iterator, Skipper > gunit
qi::rule< Iterator, Node(), Skipper > oper
qi::rule< Iterator, Node(), Skipper > file
qi::rule< Iterator, Node(), Skipper > simple_value
qi::rule< Iterator, void(char)> end_vector
IdentifierGrammar< Iterator, Skipper > gidentifier
qi::rule< Iterator, Node(), Skipper > pair
qi::rule< Iterator, std::string()> inner
RealGrammar< Iterator, Skipper > greal
qi::rule< Iterator, Node(), Skipper > property_ref
qi::rule< Iterator, Node(), Skipper > pragma_dump_file
qi::rule< Iterator, Node(), qi::locals< Iterator >, Skipper > statement
ph::function< NodeOperations > op
qi::rule< Iterator, Node(), Skipper > assign
qi::rule< Iterator, Node(), Skipper > pragma_tree
qi::rule< Iterator, Node(), Skipper > real
qi::rule< Iterator, Node(), Skipper > map_value
qi::rule< Iterator, Node(), qi::locals< Node, Node >, Skipper > condition
qi::rule< Iterator, Node(), qi::locals< char >, Skipper > vector_value
qi::rule< Iterator, void(char)> quote
qi::rule< Iterator, char()> begin_vector
ph::function< NodeOperations > op
qi::rule< Iterator > comments
qi::rule< Iterator, Node(), Skipper > units
qi::rule< Iterator, Node(), Skipper > property
qi::rule< Iterator, Node(), Skipper > include
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
IdentifierGrammar< Iterator, Skipper > gunit
qi::rule< Iterator, bool(), Skipper > boolean
ph::function< NodeOperations > op
qi::rule< Iterator, Node(), Skipper > unit
qi::rule< Iterator, std::string(), Skipper > str
qi::rule< Iterator, Node(), Skipper > print_options
StringGrammar< Iterator, Skipper > gstring
ph::function< NodeOperations > op
qi::rule< Iterator, Node(), Skipper > pragma_print
qi::rule< Iterator, Node(), Skipper > pair_value
BoolGrammar< Iterator, Skipper > gbool
qi::rule< Iterator, Node(), Skipper > ident
qi::rule< Iterator, Node(), Skipper > pragma
qi::rule< Iterator, Node(), qi::locals< std::string > > shell
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
qi::rule< Iterator, std::string(), qi::locals< char >, Skipper > str
qi::rule< Iterator, Node(), qi::locals< Iterator >, Skipper > value