1 | /*=============================================================================
|
---|
2 | A Standard compliant C++ preprocessor
|
---|
3 |
|
---|
4 | http://www.boost.org/
|
---|
5 |
|
---|
6 | Copyright (c) 2001-2005 Hartmut Kaiser. Distributed under the Boost
|
---|
7 | Software License, Version 1.0. (See accompanying file
|
---|
8 | LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
---|
9 | =============================================================================*/
|
---|
10 |
|
---|
11 | #if !defined(CPP_PREDEF_MACROS_GEN_HPP_CADB6D2C_76A4_4988_83E1_EFFC6902B9A2_INCLUDED)
|
---|
12 | #define CPP_PREDEF_MACROS_GEN_HPP_CADB6D2C_76A4_4988_83E1_EFFC6902B9A2_INCLUDED
|
---|
13 |
|
---|
14 | #include <boost/spirit/tree/parse_tree.hpp>
|
---|
15 |
|
---|
16 | #include <boost/wave/wave_config.hpp>
|
---|
17 |
|
---|
18 | ///////////////////////////////////////////////////////////////////////////////
|
---|
19 | namespace boost {
|
---|
20 | namespace wave {
|
---|
21 | namespace grammars {
|
---|
22 |
|
---|
23 | ///////////////////////////////////////////////////////////////////////////////
|
---|
24 | //
|
---|
25 | // store parser_id's of all rules of the predefined_macros_grammar here
|
---|
26 | // for later access
|
---|
27 | //
|
---|
28 | ///////////////////////////////////////////////////////////////////////////////
|
---|
29 | struct predefined_macros_grammar_rule_ids {
|
---|
30 | std::size_t plain_define_id; // #define
|
---|
31 | std::size_t macro_parameters_id;
|
---|
32 | std::size_t macro_definition_id;
|
---|
33 | };
|
---|
34 |
|
---|
35 | ///////////////////////////////////////////////////////////////////////////////
|
---|
36 | //
|
---|
37 | // predefined_macros_grammar_gen template class
|
---|
38 | //
|
---|
39 | // This template helps separating the compilation of the
|
---|
40 | // predefined_macros_grammar class from the compilation of the
|
---|
41 | // main pp_iterator. This is done to safe compilation time.
|
---|
42 | //
|
---|
43 | // This class helps parsing command line given macro definitions in a
|
---|
44 | // similar way, as macros are parsed by the cpp_grammar class.
|
---|
45 | //
|
---|
46 | ///////////////////////////////////////////////////////////////////////////////
|
---|
47 |
|
---|
48 | template <typename LexIteratorT>
|
---|
49 | struct predefined_macros_grammar_gen
|
---|
50 | {
|
---|
51 | typedef LexIteratorT iterator_type;
|
---|
52 |
|
---|
53 | // the parser_id's of all rules of the cpp_grammar are stored here
|
---|
54 | // note: these are valid only after the first call to parse_cpp_grammar
|
---|
55 | static predefined_macros_grammar_rule_ids rule_ids;
|
---|
56 |
|
---|
57 | // parse the cpp_grammar and return the resulting parse tree
|
---|
58 | static boost::spirit::tree_parse_info<iterator_type>
|
---|
59 | parse_predefined_macro (iterator_type const &first, iterator_type const &last);
|
---|
60 | };
|
---|
61 |
|
---|
62 | ///////////////////////////////////////////////////////////////////////////////
|
---|
63 | // definitions of the static members
|
---|
64 | template <typename LexIteratorT>
|
---|
65 | predefined_macros_grammar_rule_ids
|
---|
66 | predefined_macros_grammar_gen<LexIteratorT>::rule_ids;
|
---|
67 |
|
---|
68 | ///////////////////////////////////////////////////////////////////////////////
|
---|
69 | } // namespace grammars
|
---|
70 | } // namespace wave
|
---|
71 | } // namespace boost
|
---|
72 |
|
---|
73 | #endif // !defined(CPP_PREDEF_MACROS_GEN_HPP_CADB6D2C_76A4_4988_83E1_EFFC6902B9A2_INCLUDED)
|
---|