1 /* 2 * Copyright (c) 2019, The Regents of the University of California 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * * Neither the name of the University nor the 13 * names of its contributors may be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #include <boost/algorithm/string/classification.hpp> 29 #include <boost/algorithm/string/split.hpp> 30 #include <boost/algorithm/string/trim_all.hpp> 31 #include <boost/bind.hpp> 32 #include <boost/config/warning_disable.hpp> 33 #include <boost/fusion/algorithm.hpp> 34 #include <boost/fusion/container.hpp> 35 #include <boost/fusion/include/adapt_struct.hpp> 36 #include <boost/fusion/include/at_c.hpp> 37 #include <boost/fusion/include/io.hpp> 38 #include <boost/fusion/sequence.hpp> 39 #include <boost/fusion/sequence/intrinsic/at_c.hpp> 40 #include <boost/lambda/lambda.hpp> 41 #include <boost/optional/optional_io.hpp> 42 #include <boost/spirit/include/phoenix_core.hpp> 43 #include <boost/spirit/include/phoenix_operator.hpp> 44 #include <boost/spirit/include/qi.hpp> 45 #include <boost/spirit/include/qi_alternative.hpp> 46 47 namespace qi = boost::spirit::qi; 48 namespace ascii = boost::spirit::ascii; 49 namespace phoenix = boost::phoenix; 50 51 using ascii::char_; 52 using boost::fusion::at_c; 53 using boost::spirit::ascii::space_type; 54 using boost::spirit::ascii::string; 55 using boost::spirit::qi::lit; 56 57 using qi::double_; 58 using qi::int_; 59 using qi::lexeme; 60 61 using ascii::space; 62 using phoenix::ref;