Vincent Finn wrote: > >>I was talking to you on the boost newsgroup about spirit > being slow to > >>compile Here is a standalone section of code, it'll compile but you > >>can't do anything with it The compile takes about 15 mins on my > >>machine (We are using spirit for a second file but that is > smaller and > >>only takes a minute or two) [snip]
> I'll give it a go :-) There is something you can do additionally, I think. The large compile times result from the tight coupling of all your Spirit grammars, so that these couldn't be compiled separately (as far as I understood it). To overcome this problem you have to decouple the use of a grammar from it's instantiation. I've solved this through a small helper generator template function like the following: // parse the grammar and return the resulting parse tree template <typename IteratorT> boost::spirit::parse_info<IteratorT> parse_grammar (IteratorT const &first, IteratorT const &last); This declaration you should make visible to the code, which _uses_ the grammar. There you have to replace your call to boost::spirit::parse(first, last) --> parse_grammar(first, last); The definition of the function parse_grammar has to look like the following template <typename IteratorT> boost::spirit::parse_info<IteratorT> parse_grammar (IteratorT const &first, IteratorT const &last) { return boost::spirit::parse(first, last); } and this definition you can put into a separate compilation unit. The only problem left is, that you have to instantiate the correct parse_grammar function explicitely with the iterator type, you've used, maybe like the following: template boost::spirit::parse_info<char const *> parse_grammar (char const * const &first, char const * const &last); Certainly this explicit instantiation should go into the second compilation unit. Hope this helps. Regards Hartmut BTW this method works well for me already in the ongoing Spirit based C preprocessor sample. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost