23 #ifndef PLUGINS_PDDL_GRAMMAR_H_
24 #define PLUGINS_PDDL_GRAMMAR_H_
28 namespace pddl_parser {
34 template <
typename Iterator>
39 skip = ascii::space | (
';' >> *(qi::char_ - qi::eol));
48 template <
typename Iterator,
typename Skipper = pddl_skipper<Iterator>>
58 name_type = lexeme[alnum >> *(alnum | char_(
'-') | char_(
'_'))];
60 domain_name = lit(
"define") >>
'(' >> lit(
"domain") >> +(char_ -
')') >>
')';
62 requirements =
'(' >> lit(
":requirements") >> *(
':' >> lexeme[*qi::alnum]) >>
')';
76 atom = +(graph -
'(' -
')');
83 duration = lit(
":duration") >>
'(' >>
'=' >> lit(
"?duration") >> uint_ >>
')';
95 qi::rule<Iterator, std::string(), Skipper>
name_type;
104 qi::rule<Iterator, pairs_type(), Skipper>
types;
115 qi::rule<Iterator, pairs_multi_consts(), Skipper>
constants;
122 qi::rule<Iterator, predicate_type(), Skipper>
pred;
124 qi::rule<Iterator, std::vector<predicate_type>(), Skipper>
predicates;
127 qi::rule<Iterator, Atom()>
atom;
135 qi::rule<Iterator, Expression(), Skipper>
effects;
147 qi::rule<Iterator, std::vector<Action>(), Skipper>
actions;
156 template <
typename Iterator,
typename Skipper = pddl_skipper<Iterator>>
166 name_type = lexeme[alnum >> *(alnum | char_(
'-') | char_(
'_'))];
168 problem_name =
'(' >> lit(
"define") >>
'(' >> lit(
"problem") >>
name_type >>
')';
176 atom = +(graph -
'(' -
')');
179 init =
'(' >> lit(
":init") >> +
expression >>
')';
181 goal =
'(' >> lit(
":goal") >> +
expression >>
')';
183 problem = problem_name >>
domain_name >> objects >> init >> goal;
201 qi::rule<Iterator, pairs_multi_consts(), Skipper>
objects;
204 qi::rule<Iterator, Atom()>
atom;
210 qi::rule<Iterator, Expression(), Skipper>
goal;
212 qi::rule<Iterator, std::vector<Expression>(), Skipper>
init;
A structured representation of a PDDL action.
A structured representation of a PDDL domain.
A PDDL formula (either part of a precondition or an effect(.
A structured representation of a PDDL problem.
A Boost QI parser for a PDDL domain.
qi::rule< Iterator, pairs_multi_consts(), Skipper > constants
Named placeholder for parsing a list of constants.
qi::rule< Iterator, std::vector< std::string >), Skipper > requirements
Named placeholder for parsing requirements.
qi::rule< Iterator, pair_multi_const(), Skipper > constant_multi_pair
Named placeholder for parsing a list of typed constants.
qi::rule< Iterator, Atom()> atom
Named placeholder for parsing an atom.
qi::rule< Iterator, Expression(), Skipper > preconditions
Named placeholder for parsing a PDDL precondition.
qi::rule< Iterator, pairs_type(), Skipper > types
Named placeholder for parsing types.
qi::rule< Iterator, string_pairs_type(), Skipper > action_params
Named placeholder for parsing action parameters.
qi::rule< Iterator, type_list(), Skipper > predicate_params
Named placeholder for parsing a list of predicate parameters.
qi::rule< Iterator, predicate_type(), Skipper > pred
Named placeholder for parsing a predicate type.
qi::rule< Iterator, Expression(), Skipper > temp_breakup
Named placeholder for parsing a temporal breakup.
qi::rule< Iterator, Domain(), Skipper > domain
Named placeholder for parsing a domain.
qi::rule< Iterator, Expression(), Skipper > expression
Named placeholder for parsing a PDDL expression.
qi::rule< Iterator, Expression(), Skipper > cond_breakup
Named placeholder for parsing a conditional breakup.
qi::rule< Iterator, std::string(), Skipper > domain_name
Named placeholder for parsing a domain name.
qi::rule< Iterator, string_pair_type(), Skipper > param_pair
Named placeholder for parsing a parameter pair.
qi::rule< Iterator, Predicate(), Skipper > predicate
Named placeholder for parsing a predicate.
qi::rule< Iterator, Action(), Skipper > action
Named placeholder for parsing an action.
qi::rule< Iterator, std::vector< Action >), Skipper > actions
Named placeholder for parsing a list of actions.
qi::rule< Iterator, std::string(), Skipper > name_type
Named placeholder for parsing a name.
qi::rule< Iterator, int(), Skipper > duration
Named placeholder for parsing an action duration.
qi::rule< Iterator, pair_type(), Skipper > type_pair
Named placeholder for parsing type pairs.
qi::rule< Iterator, std::vector< predicate_type >), Skipper > predicates
Named placeholder for parsing a list of predicate types.
qi::rule< Iterator, Expression(), Skipper > effects
Named placeholder for parsing a PDDL effect.
qi::rule< Iterator, type_list(), Skipper > constant_value_list
Named placeholder for parsing a list of constant values.
qi::rule< Iterator, string_pairs_type(), Skipper > param_pairs
Named placeholder for parsing a list of parameter pairs.
A skipper for PDDL files.
qi::rule< Iterator > skip
The actual skipping rule.
A Boost QI parser for a PDDL problem.
qi::rule< Iterator, std::vector< Expression >), Skipper > init
Named placeholder for parsing the initial state.
qi::rule< Iterator, type_list(), Skipper > constant_value_list
Named placeholder for parsing a list of constant values.
qi::rule< Iterator, std::string(), Skipper > name_type
Named placeholder for parsing a name.
qi::rule< Iterator, std::string(), Skipper > domain_name
Named placeholder for parsing a domain name.
qi::rule< Iterator, Problem(), Skipper > problem
Named placeholder for parsing a PDDL problem.
qi::rule< Iterator, Expression(), Skipper > goal
Named placeholder for parsing a PDDL goal.
qi::rule< Iterator, std::string(), Skipper > problem_name
Named placeholder for parsing a problem name.
qi::rule< Iterator, Expression(), Skipper > expression
Named placeholder for parsing a PDDL expression.
qi::rule< Iterator, Predicate(), Skipper > predicate
Named placeholder for parsing a predicate.
qi::rule< Iterator, pair_multi_const(), Skipper > constant_multi_pair
Named placeholder for parsing a list of typed constants.
qi::rule< Iterator, Atom()> atom
Named placeholder for parsing an atom.
qi::rule< Iterator, pairs_multi_consts(), Skipper > objects
Named placeholder for parsing a list of domain objects.
qi::rule< Iterator, type_list(), Skipper > predicate_params
Named placeholder for parsing a list of predicate parameters.