OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
associate_def.hpp
Go to the documentation of this file.
1 //
2 // Copyright & License: See Copyright.readme in src directory
3 //
4 
9 #ifndef ASSOCIATE_DEF_HPP_
10 #define ASSOCIATE_DEF_HPP_
11 
12 #include "associate.hpp"
13 
14 #include <boost/spirit/include/phoenix_core.hpp>
15 #include <boost/spirit/include/phoenix_operator.hpp>
16 #include <boost/spirit/include/phoenix_fusion.hpp>
17 #include <boost/spirit/include/phoenix_bind.hpp>
18 
19 namespace SDDS { namespace parser
20 {
21  template <typename Iterator>
23  associate_parser::base_type(start)
24  {
25  using qi::on_error;
26  using qi::fail;
27  using phx::function;
28  typedef function<error_handler<Iterator> > error_handler_function;
29 
30  // qi::_1_type _1;
31  qi::_3_type _3;
32  qi::_4_type _4;
33  qi::lexeme_type lexeme;
34  qi::char_type char_;
35  qi::lit_type lit;
36  qi::long_type long_;
37  qi::short_type short_;
38  qi::alpha_type alpha;
39  qi::alnum_type alnum;
40  // qi::_val_type _val;
41  qi::_pass_type _pass;
42  qi::eps_type eps;
43 
44  quoted_string %= lexeme['"' >> +(char_ - '"') >> '"'];
45  string %= quoted_string
46  | lexeme[(alpha | '_') >> *(alnum | '_')];
47 
48  associate_name = lit("mode") > '=' > string;
49  associate_filename = lit("filename") > '=' > string;
50  associate_path = lit("path") > '=' > string;
51  associate_description = lit("description") > '=' > string;
52  associate_contents= lit("contents") > '=' > string;
53  associate_sdds= lit("column_major_order") > '=' > long_;
54 
55  auto complainAssociate = phx::bind(&associate::complainUnsupported<associate::ASSOCIATE>::apply);
56  auto complainName = phx::bind(&associate::complainUnsupported<associate::NAME>::apply);
57  auto complainFilename = phx::bind(&associate::complainUnsupported<associate::FILENAME>::apply);
58  auto complainPath = phx::bind(&associate::complainUnsupported<associate::PATH>::apply);
59  auto complainDescription = phx::bind(&associate::complainUnsupported<associate::DESCRIPTION>::apply);
60  auto complainContents = phx::bind(&associate::complainUnsupported<associate::CONTENTS>::apply);
61  auto complainSDDS = phx::bind(&associate::complainUnsupported<associate::SDDS>::apply);
62 
64  ((',' > associate_name[_pass = complainName])
65  ^ (',' > associate_filename[_pass = complainFilename])
66  ^ (',' > associate_path[_pass = complainPath])
67  ^ (',' > associate_description[_pass = complainDescription])
68  ^ (',' > associate_contents[_pass = complainContents])
69  ^ (',' > associate_sdds[_pass = complainSDDS]));
71  ((associate_name[_pass = complainName] > ',')
72  ^ (associate_filename[_pass = complainFilename] > ',')
73  ^ (associate_path[_pass = complainPath] > ',')
74  ^ (associate_description[_pass = complainDescription] > ',')
75  ^ (associate_contents[_pass = complainContents] > ',')
76  ^ (associate_sdds[_pass = complainSDDS] > ','));
77 
78  start =
79  lit("&associate")[_pass = complainAssociate]
80  > lit("&end");
81 
82  BOOST_SPIRIT_DEBUG_NODES(
83  (start)
84  )
85 
86  on_error<fail>(start,
87  error_handler_function(_error_handler)(
88  std::string("Error! Expecting "), _4, _3));
89  }
90 }}
91 #endif /* ASSOCIATE_HPP_ */
qi::rule< Iterator, std::string(), skipper< Iterator > > string
Definition: associate.hpp:98
qi::rule< Iterator, long(), skipper< Iterator > > associate_sdds
Definition: associate.hpp:101
qi::rule< Iterator, std::string(), skipper< Iterator > > associate_path
Definition: associate.hpp:98
constexpr double alpha
The fine structure constant, no dimension.
Definition: Physics.h:79
qi::rule< Iterator, std::string(), skipper< Iterator > > associate_name
Definition: associate.hpp:98
qi::rule< Iterator, std::string(), skipper< Iterator > > associate_filename
Definition: associate.hpp:98
qi::rule< Iterator, associate(), skipper< Iterator > > start
Definition: associate.hpp:97
qi::rule< Iterator, std::string(), skipper< Iterator > > quoted_string
Definition: associate.hpp:98
qi::rule< Iterator, std::string(), skipper< Iterator > > associate_contents
Definition: associate.hpp:98
qi::rule< Iterator, ast::nil(), skipper< Iterator > > associate_unsupported_post
Definition: associate.hpp:102
qi::rule< Iterator, std::string(), skipper< Iterator > > associate_description
Definition: associate.hpp:98
associate_parser(error_handler< Iterator > &_error_handler)
qi::rule< Iterator, ast::nil(), skipper< Iterator > > associate_unsupported_pre
Definition: associate.hpp:102