10#define BOOST_SPIRIT_UNICODE
11#include <boost/spirit/include/qi.hpp>
12#include <analysis/DecayDescriptor/DecayStringParticle.h>
13#include <analysis/DecayDescriptor/DecayStringDecay.h>
14#include <analysis/DecayDescriptor/DecayString.h>
29 template <
typename Iterator>
30 struct DecayStringGrammar : boost::spirit::qi::grammar<Iterator, DecayString(), boost::spirit::unicode::space_type> {
33 using boost::spirit::unicode::char_;
34 using boost::spirit::unicode::string;
35 using boost::spirit::unicode::space;
36 using boost::spirit::qi::lit;
37 using boost::spirit::qi::lexeme;
38 using boost::spirit::repeat;
48 reserved = space ||
'^' ||
'[' ||
']' ||
'>' ||
':' ||
'.' ||
'?' ||
'!' ||
'@';
53 selector = string(
"^") | string(
"@") | string(
"(misID)") | string(
"(decay)");
57 arrow %= string(
"->") | string(
"=direct=>") | string(
"=norad=>") | string(
"=exact=>");
60 keyword = string(
"...") | string(
"?nu") | string(
"!nu") | string(
"?gamma") | string(
"!gamma") | string(
"?addbrems");
78 boost::spirit::qi::rule<
Iterator, std::string(), boost::spirit::unicode::space_type>
selector;
80 boost::spirit::qi::rule<
Iterator, std::string(), boost::spirit::unicode::space_type>
label;
82 boost::spirit::qi::rule<
Iterator, std::string(), boost::spirit::unicode::space_type>
arrow;
84 boost::spirit::qi::rule<
Iterator, std::string(), boost::spirit::unicode::space_type>
keyword;
86 boost::spirit::qi::rule<Iterator, std::vector<std::string>(), boost::spirit::unicode::space_type>
keywordlist;
94 boost::spirit::qi::rule<Iterator, std::vector<DecayString>(), boost::spirit::unicode::space_type>
daughterlist;
boost::variant< boost::recursive_wrapper< DecayStringDecay >, DecayStringParticle > DecayString
The DecayStringElement can be either a DecayStringDecay or a vector of mother particles.
map< unsigned, size_t >::const_iterator Iterator
Iteratior for m_map.
Abstract base class for different kinds of events.
Holds the information of a decay.
This class describes the grammar and the syntax elements of decay strings.
boost::spirit::qi::rule< Iterator, DecayString(), boost::spirit::unicode::space_type > start
The rule where the parser starts.
boost::spirit::qi::rule< Iterator, DecayString(), boost::spirit::unicode::space_type > daughter
A daughter particle which can be either a plain particle or a decaying particle.
boost::spirit::qi::rule< Iterator, std::vector< std::string >(), boost::spirit::unicode::space_type > keywordlist
The list of the keywords.
boost::spirit::qi::rule< Iterator, std::string(), boost::spirit::unicode::space_type > keyword
Syntax keyword.
boost::spirit::qi::rule< Iterator, DecayStringParticle(), boost::spirit::unicode::space_type > particle
Particle in the decay string: 'selector name label'.
boost::spirit::qi::rule< Iterator > reserved
Reserved characters that are not allowed in particle names or labels.
boost::spirit::qi::rule< Iterator, DecayStringDecay(), boost::spirit::unicode::space_type > decay
Syntax of a decay: 'mother arrow daughters ...'.
boost::spirit::qi::rule< Iterator, DecayStringDecay(), boost::spirit::unicode::space_type > daughterdecay
Syntax of decaying daughter particle.
boost::spirit::qi::rule< Iterator, std::string(), boost::spirit::unicode::space_type > selector
Particles can be selected by preceding '^' symbol.
boost::spirit::qi::rule< Iterator, std::vector< DecayString >(), boost::spirit::unicode::space_type > daughterlist
The list of the daughters, i.e.
boost::spirit::qi::rule< Iterator, std::string(), boost::spirit::unicode::space_type > label
Label that can be attached to a particle name, separated by the '/' symbol.
boost::spirit::qi::rule< Iterator, std::string(), boost::spirit::unicode::space_type > arrow
Allowed arrow types.
Holds the information of a particle in the decay string.