Re: splitted source (decl, def) gives compile errors byy use for test suite
Tom Kulaga <[email protected]>
| Newsgroups | gmane.comp.parsers.spirit.general |
|---|---|
| Message-ID | <CAMWfBPFgAd3Ovcti63pfKM8XQ1Anq-rmsGu-DCeK4Sj1mMb3UA@mail.gmail.com> |
I've had success using the method used in the calc examples: https://github.com/boostorg/spirit/tree/develop/example/x3/calc/calc7 Have a String_literal.hpp String_literal_def.hpp String_literal.cpp On Thu., 2 Mar. 2017, 6:59 am Olaf Peter, <[email protected]> wrote: > Hello, > > I run into a compiler error : > > test/grammar_api.cpp: In function 'const string_literal_type& > string_literal()': > test/grammar_api.cpp:1291:9: error: 'string_literal' is not a member of > 'parser' > return parser::string_literal; > ^~~~~~ > > using spirit x3 with these project organization: > > * include/my/grammar.hpp: > ----8<---- > namespace parser { > // Parser Rule IDs > struct string_literal_class; > ... > // Parser Rule Types > typedef x3::rule<string_literal_class> string_literal_type; > } > ----8<---- > > * include/my/grammar_def.hpp: > ----8<---- > #include "my/grammar.hpp" > namespace parser { > // Parser Declarations > string_literal_type const string_literal { "string_literal" }; > // Parser Definition > auto const string_literal_def = > '"' > *graph > '"' > ; > // Definition > BOOST_SPIRIT_DEFINE(string_literal) > } > ----8<---- > > * include/my/config.hpp: > ----8<---- > namespace parser { > typedef std::string::const_iterator iterator_type; > typedef x3::unused_type context_type; > } > ----8<---- > > * src/grammar.cpp: > ----8<---- > #include <eda/vhdl93/grammar_def.hpp> > #include <eda/vhdl93/parser_config.hpp> > namespace parser { > BOOST_SPIRIT_INSTANTIATE(string_literal, iterator_type, > context_type); > } > ----8<---- > > * test/grammar_api.h: > ----8<---- > #include "my/grammar.hpp" > // Grammar Test Bench API Definition > namespace parser { > BOOST_SPIRIT_DECLARE(string_literal_type); > } > parser::string_literal_type const& string_literal(); > ----8<---- > > * test/grammar_api.cpp > ----8<---- > // Grammar Test Bench API Definition > #include "grammar_api.hpp" > parser::string_literal_type const& string_literal() { > return parser::string_literal; > } > ----8<---- > > * test/main.cpp > ----8<---- > // using the string_literal() parser, not yet here > ----8<---- > > > The idea is not to expose all parsers into the client code, but make > them exposed to the tests; inspired by test driven development. > > How to organize it correct and avoid multiple instances? The grammar.hpp > self is missing the top/entry rule, e.g. program, since I start with > smaller production rules (bottom up design) > > To fix the compiler error I have to include test/grammar_api.h in > grammar_def.hpp. I guess these increases compile time later on and > obviously shall be avoided. > > > Thanks, > > Olaf > > > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > _______________________________________________ > Spirit-general mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/spirit-general > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Spirit-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/spirit-general