16 #include <boost/config/warning_disable.hpp>
17 #include <boost/spirit/include/qi.hpp>
18 #include <boost/fusion/include/adapt_struct.hpp>
20 #define BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
21 #define BOOST_SPIRIT_QI_DEBUG
41 std::cerr <<
"can't handle binary data yet" <<
std::endl;
47 template <attributes A>
52 std::string attributeString;
56 attributeString =
"lines_per_row";
59 attributeString =
"no_row_count";
62 attributeString =
"fixed_row_count";
65 attributeString =
"additional_header_lines";
68 attributeString =
"column_major_order";
71 attributeString =
"endian";
76 std::cerr << attributeString <<
" not supported yet" <<
std::endl;
83 out <<
"mode = " << data_.
mode_m;
94 namespace SDDS {
namespace parser
96 namespace qi = boost::spirit::qi;
97 namespace ascii = boost::spirit::ascii;
98 namespace phx = boost::phoenix;
100 template <
typename Iterator>
101 struct data_parser: qi::grammar<Iterator, data(), skipper<Iterator> >
103 data_parser(error_handler<Iterator> & _error_handler);
105 qi::rule<Iterator, data(), skipper<Iterator> > start;
106 qi::rule<Iterator, ast::datamode(), skipper<Iterator> > data_mode;
107 qi::rule<Iterator, long(), skipper<Iterator> > data_lines,
108 data_row, data_fixed, data_additional;
109 qi::rule<Iterator, short(), skipper<Iterator> > data_column;
110 qi::rule<Iterator, ast::endianess(), skipper<Iterator> > data_endian;
111 qi::rule<Iterator, ast::nil(), skipper<Iterator> > data_unsupported_pre,
112 data_unsupported_post;
113 qi::symbols<char, ast::endianess> dataendian;
114 qi::symbols<char, ast::datamode>
datamode;
BOOST_FUSION_ADAPT_STRUCT(SDDS::column,(boost::optional< std::string >, name_m)(boost::optional< SDDS::ast::datatype >, type_m)(boost::optional< std::string >, units_m)(boost::optional< std::string >, description_m)(SDDS::ast::variant_t, value_m)) namespace SDDS
std::ostream & operator<<(std::ostream &out, const array &)
Inform & endl(Inform &inf)