9#include <boost/date_time/posix_time/posix_time.hpp>
10#include <boost/date_time/gregorian/gregorian.hpp>
12#define BOOST_SPIRIT_DEBUG
13#include <boost/spirit/home/classic/core.hpp>
14#include <boost/spirit/home/classic/attribute.hpp>
15#include <boost/spirit/home/classic/utility/functor_parser.hpp>
16#include <boost/spirit/home/classic/utility/loops.hpp>
17#include <boost/spirit/home/classic/utility/chset.hpp>
18#include <boost/spirit/home/classic/utility/confix.hpp>
19#include <boost/spirit/home/classic/iterator/file_iterator.hpp>
20#include <boost/spirit/home/classic/actor/push_back_actor.hpp>
21#include <boost/spirit/home/classic/actor/assign_actor.hpp>
23#include <stdair/service/Logger.hpp>
31typedef boost::spirit::classic::scanner<iterator_t>
scanner_t;
32typedef boost::spirit::classic::rule<scanner_t>
rule_t;
44 std::string lPlace (iStr, iStrEnd);
99 std::string lAirlineCode (iStr, iStrEnd);
118 std::string lAirlineName (iStr, iStrEnd);
152 std::string lPassengerType (iStr, iStrEnd);
171 std::string lPassengerType (iStr, iStrEnd);
190 std::string lPassengerType (iStr, iStrEnd);
203 boost::spirit::classic::int_parser<unsigned int, 10, 1, 1>
int1_p;
205 boost::spirit::classic::uint_parser<unsigned int, 10, 1, 1>
uint1_p;
207 boost::spirit::classic::uint_parser<unsigned int, 10, 1, 2>
uint1_2_p;
209 boost::spirit::classic::uint_parser<int, 10, 2, 2>
uint2_p;
211 boost::spirit::classic::uint_parser<int, 10, 2, 4>
uint2_4_p;
213 boost::spirit::classic::uint_parser<int, 10, 4, 4>
uint4_p;
215 boost::spirit::classic::uint_parser<int, 10, 1, 4>
uint1_4_p;
248 using namespace boost::spirit::classic;
252 public boost::spirit::classic::grammar<SearchStringParser> {
258 template <
typename ScannerT>
283 >> boost::spirit::classic::chset_p(
"/-")
285 >> ! ( boost::spirit::classic::chset_p(
"/-")
330 lexeme_d[ as_lower_d [ str_p(
"adult") >> !ch_p(
's') ] ]
334 lexeme_d[ as_lower_d [ str_p(
"child") >> !str_p(
"ren") ] ]
338 lexeme_d[ as_lower_d [ str_p(
"dog") | str_p(
"cat") >> !ch_p(
's') ] ]
342 BOOST_SPIRIT_DEBUG_NODE (
places);
344 BOOST_SPIRIT_DEBUG_NODE (
dates);
345 BOOST_SPIRIT_DEBUG_NODE (
date);
346 BOOST_SPIRIT_DEBUG_NODE (
day);
347 BOOST_SPIRIT_DEBUG_NODE (
month);
348 BOOST_SPIRIT_DEBUG_NODE (
year);
377 iterator_t lStringIterator = iSearchString.c_str();
381 boost::spirit::classic::parse_info<iterator_t> info =
382 boost::spirit::classic::parse (lStringIterator, lSearchStringParser,
383 boost::spirit::classic::space_p);
385 STDAIR_LOG_DEBUG (
"-------------------------");
387 bool hasBeenParsingSuccessful = info.full;
388 if (hasBeenParsingSuccessful ==
true) {
389 STDAIR_LOG_DEBUG (
"Parsing succeeded");
392 STDAIR_LOG_DEBUG (
"Parsing failed");
394 STDAIR_LOG_DEBUG (
"-------------------------");
396 return oSearchStringStruct;
boost::spirit::classic::rule< scanner_t > rule_t
boost::spirit::classic::scanner< iterator_t > scanner_t
boost::spirit::classic::uint_parser< int, 10, 2, 4 > uint2_4_p
boost::spirit::classic::uint_parser< unsigned int, 10, 1, 1 > uint1_p
boost::spirit::classic::uint_parser< unsigned int, 10, 1, 2 > uint1_2_p
boost::spirit::classic::uint_parser< int, 10, 1, 4 > uint1_4_p
boost::spirit::classic::uint_parser< int, 10, 4, 4 > uint4_p
boost::spirit::classic::uint_parser< int, 10, 2, 2 > uint2_p
SearchString_T parseBookingRequest(const std::string &iSearchString)
boost::spirit::classic::int_parser< unsigned int, 10, 1, 1 > int1_p
definition(SearchStringParser const &self)
boost::spirit::classic::rule< ScannerT > preferred_airlines
boost::spirit::classic::rule< ScannerT > date
boost::spirit::classic::rule< ScannerT > passenger_type
boost::spirit::classic::rule< ScannerT > places
boost::spirit::classic::rule< ScannerT > passenger_adult_type
boost::spirit::classic::rule< ScannerT > year
boost::spirit::classic::rule< ScannerT > airline_name
boost::spirit::classic::rule< ScannerT > search_string
boost::spirit::classic::rule< ScannerT > dates
boost::spirit::classic::rule< ScannerT > airline_code
boost::spirit::classic::rule< ScannerT > place_element
boost::spirit::classic::rule< ScannerT > passenger_child_type
boost::spirit::classic::rule< ScannerT > passenger_pet_type
boost::spirit::classic::rule< ScannerT > passenger_number
boost::spirit::classic::rule< ScannerT > month
boost::spirit::classic::rule< ScannerT > const & start() const
boost::spirit::classic::rule< ScannerT > day
boost::spirit::classic::rule< ScannerT > passengers
SearchStringParser(SearchString_T &ioSearchString)
SearchString_T & _searchString
SearchString_T & _searchString
store_adult_passenger_type(SearchString_T &ioSearchString)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(iterator_t iStr, iterator_t iStrEnd) const
store_airline_code(SearchString_T &ioSearchString)
SearchString_T & _searchString
SearchString_T & _searchString
store_airline_name(SearchString_T &ioSearchString)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(bool iAirlineSign) const
SearchString_T & _searchString
store_airline_sign(SearchString_T &ioSearchString)
store_child_passenger_type(SearchString_T &ioSearchString)
SearchString_T & _searchString
void operator()(iterator_t iStr, iterator_t iStrEnd) const
store_date(SearchString_T &ioSearchString)
void operator()(iterator_t iStr, iterator_t iStrEnd) const
SearchString_T & _searchString
store_passenger_number(SearchString_T &ioSearchString)
void operator()(unsigned int iNumber) const
SearchString_T & _searchString
store_pet_passenger_type(SearchString_T &ioSearchString)
SearchString_T & _searchString
void operator()(iterator_t iStr, iterator_t iStrEnd) const
void operator()(iterator_t iStr, iterator_t iStrEnd) const
SearchString_T & _searchString
store_place_element(SearchString_T &ioSearchString)