173 struct SplitInputFileParser : qi::grammar<Iterator, SplitInputFile(), Skipper>
177 SplitInputFileParser() : SplitInputFileParser::base_type(root_rule_,
"SplitInputFile")
179 namespace phx = boost::phoenix;
189 using boost::spirit::lexeme;
190 using boost::spirit::as_string;
191 using boost::spirit::ascii::no_case;
193 root_rule_.name(
"SplitInputFile_root_rule");
195 root_rule_ = both_ | unreadable_ |only_input_ ;
200 both_.name(
"have_both_config_and_input");
202 (omit[config_] >> end_ >> omit[input_] >> end_ >> omit[no_decl_]) [phx::bind(&SplitInputFile::SetConfigInput, _val, _1, _2)]
204 (omit[config_] >> end_ >> omit[input_] >> no_decl_) [phx::bind(&SplitInputFile::SetConfigInput, _val, _1, _2)]
206 (omit[config_] >> end_ >> end_ >> omit[no_decl_]) [phx::bind(&SplitInputFile::SetConfigInput, _val, _1, _2)]
208 (omit[config_] >> input_ >> end_ >> omit[no_decl_]) [phx::bind(&SplitInputFile::SetConfigInput, _val, _1, _2)]
210 (omit[config_] >> end_ >> no_decl_) [phx::bind(&SplitInputFile::SetConfigInput, _val, _1, _2)]
212 (omit[config_] >> input_ >> no_decl_) [phx::bind(&SplitInputFile::SetConfigInput, _val, _1, _2)]
231 only_input_.name(
"have_only_input");
233 (omit[input_] >> end_ >> omit[no_decl_])
235 (omit[input_] >> no_decl_)
237 (end_ >> omit[no_decl_])
241 [phx::bind(&SplitInputFile::SetInput, _val, _1)];
243 unreadable_.name(
"unreadable_input");
245 (omit[config_] >> no_decl_)
247 (end_ >> omit[input_] >> end_ >> omit[no_decl_])
249 (end_ >> omit[input_] >> omit[no_decl_])
251 (end_ >> end_ >> omit[no_decl_])
253 [phx::bind(&SplitInputFile::SetReadable, _val,
false)];
255 config_.name(
"config_");
256 config_ = no_case[*(char_ -
"CONFIG") >>
"CONFIG"];
259 end_ = no_case[lexeme[*(char_ -
"END;")] >>
"END;"];
261 input_.name(
"input_");
262 input_ = no_case[lexeme[*(char_ -
"INPUT")] >>
"INPUT"];
266 no_decl_.name(
"no_decl_");
267 no_decl_ = lexeme[*(char_)];
285 using phx::construct;
286 using namespace qi::labels;
287 qi::on_error<qi::fail>
290 val(
"config/input split parser could not complete parsing. Expecting ")<<
293 construct<std::string>(_3,_2)<<
299 qi::rule<Iterator,
SplitInputFile(), ascii::space_type > root_rule_, both_, only_input_, unreadable_;
300 qi::rule<Iterator, ascii::space_type, std::string()> end_, input_, no_decl_;
301 qi::rule<Iterator, ascii::space_type> config_;
316 struct CommentStripper : qi::grammar<Iterator, std::string(), Skipper>
320 CommentStripper() : CommentStripper::base_type(root_rule_,
"CommentStripper")
322 namespace phx = boost::phoenix;
334 using boost::spirit::lexeme;
335 using boost::spirit::as_string;
337 root_rule_.name(
"CommentStripper_root_rule");
339 root_rule_ = eps[_val =
""] >> *line_[_val = _val + _1 +
"\n"] >> -last_line_[_val = _val + _1 +
"\n"];
342 line_.name(
"line_of_commented_input");
343 line_ = lexeme[*(char_ - eol -
"%") >> omit[-(
"%" >> lexeme[*(char_ - eol)] )] >> (eol ) ];
345 last_line_.name(
"line_of_commented_input_with_no_eol");
346 last_line_ = lexeme[*(char_ -
"%") >> omit[-(
"%" >> lexeme[*(char_ - eol)] )]] ;
359 using phx::construct;
360 using namespace qi::labels;
361 qi::on_error<qi::fail>
364 val(
"config/input split parser could not complete parsing. Expecting ")<<
367 construct<std::string>(_3,_2)<<
373 qi::rule<Iterator, std::string(), ascii::space_type > root_rule_;
374 qi::rule<Iterator, ascii::space_type, std::string()> line_, last_line_;
386 phrase_parse(iter, end, commentparser,boost::spirit::ascii::space, uncommented_str_input);
394 phrase_parse(iter, end, spliter,boost::spirit::ascii::space, input_file);
410 std::string::const_iterator iter = file_as_string.begin();
411 std::string::const_iterator end = file_as_string.end();
412 phrase_parse(iter, end, parser, boost::spirit::ascii::space, config_and_input);
414 return std::make_tuple(config_and_input.Config(), config_and_input.Input());