OSDN Git Service

seq.hpp はじめる
authormyun2 <myun2@nwhite.info>
Tue, 12 Jun 2012 08:52:35 +0000 (17:52 +0900)
committermyun2 <myun2@nwhite.info>
Tue, 12 Jun 2012 08:52:35 +0000 (17:52 +0900)
roast/include/roast/lexical2/lexical.hpp
roast/include/roast/lexical2/seq.hpp

index 8a406e8..a217643 100644 (file)
@@ -14,6 +14,9 @@
 #include "roast/lexical2/fixed_string.hpp"
 #include "roast/lexical2/characters.hpp"
 
+//     Composite
+#include "roast/lexical2/seq.hpp"
+
 //     Utilities
 #include "roast/lexical2/lexical2_util.hpp"
 #include "roast/lexical2/to_string.hpp"
index 7b00cb3..72f0cbd 100644 (file)
@@ -13,46 +13,116 @@ namespace roast
 {
        namespace lexical
        {
-               namespace rule
-               {
-                       //////////////////////////////////////////////////////////////////////////////////
+               //////////////////////////////////////////////////////////////////////////////////
+               
+               template <
+                       typename T0 = EmptyType,
+                       typename T1 = EmptyType,
+                       typename T2 = EmptyType,
+                       typename T3 = EmptyType,
+                       typename T4 = EmptyType,
+                       typename T5 = EmptyType,
+                       typename T6 = EmptyType,
+                       typename T7 = EmptyType,
+                       typename T8 = EmptyType,
+                       typename T9 = EmptyType,
+                       typename T10 = EmptyType,
+                       typename T11 = EmptyType,
+                       typename T12 = EmptyType,
+                       typename T13 = EmptyType,
+                       typename T14 = EmptyType,
+                       typename T15 = EmptyType,
+                       typename T16 = EmptyType,
+                       typename T17 = EmptyType,
+                       typename T18 = EmptyType,
+                       typename T19 = EmptyType,
+                       typename T20 = EmptyType,
+                       typename T21 = EmptyType,
+                       typename T22 = EmptyType,
+                       typename T23 = EmptyType,
+                       typename T24 = EmptyType,
+                       typename T25 = EmptyType,
+                       typename T26 = EmptyType,
+                       typename T27 = EmptyType,
+                       typename T28 = EmptyType,
+                       typename T29 = EmptyType,
+                       typename T30 = EmptyType,
+                       typename T31 = EmptyType,
+                       typename T32 = EmptyType
+                       >
+               struct seq : tuple<
+                       T0,
+                       T1,
+                       T2,
+                       T3,
+                       T4,
+                       T5,
+                       T6,
+                       T7,
+                       T8,
+                       T9,
+                       T10,
+                       T11,
+                       T12,
+                       T13,
+                       T14,
+                       T15,
+                       T16,
+                       T17,
+                       T18,
+                       T19,
+                       T20,
+                       T21,
+                       T22,
+                       T23,
+                       T24,
+                       T25,
+                       T26,
+                       T27,
+                       T28,
+                       T29,
+                       T30,
+                       T31,
+                       T32>
                        
-                       template <
-                               typename T0 = EmptyType,
-                               typename T1 = EmptyType,
-                               typename T2 = EmptyType,
-                               typename T3 = EmptyType,
-                               typename T4 = EmptyType,
-                               typename T5 = EmptyType,
-                               typename T6 = EmptyType,
-                               typename T7 = EmptyType,
-                               typename T8 = EmptyType,
-                               typename T9 = EmptyType,
-                               typename T10 = EmptyType,
-                               typename T11 = EmptyType,
-                               typename T12 = EmptyType,
-                               typename T13 = EmptyType,
-                               typename T14 = EmptyType,
-                               typename T15 = EmptyType,
-                               typename T16 = EmptyType,
-                               typename T17 = EmptyType,
-                               typename T18 = EmptyType,
-                               typename T19 = EmptyType,
-                               typename T20 = EmptyType,
-                               typename T21 = EmptyType,
-                               typename T22 = EmptyType,
-                               typename T23 = EmptyType,
-                               typename T24 = EmptyType,
-                               typename T25 = EmptyType,
-                               typename T26 = EmptyType,
-                               typename T27 = EmptyType,
-                               typename T28 = EmptyType,
-                               typename T29 = EmptyType,
-                               typename T30 = EmptyType,
-                               typename T31 = EmptyType,
-                               typename T32 = EmptyType
-                               >
-                       struct seq : tuple<
+                       /*
+                       typename _seq::te<T0>::type,
+                       typename _seq::te<T1>::type,
+                       typename _seq::te<T2>::type,
+                       typename _seq::te<T3>::type,
+                       typename _seq::te<T4>::type,
+                       typename _seq::te<T5>::type,
+                       typename _seq::te<T6>::type,
+                       typename _seq::te<T7>::type,
+                       typename _seq::te<T8>::type,
+                       typename _seq::te<T9>::type,
+                       typename _seq::te<T10>::type,
+                       typename _seq::te<T11>::type,
+                       typename _seq::te<T12>::type,
+                       typename _seq::te<T13>::type,
+                       typename _seq::te<T14>::type,
+                       typename _seq::te<T15>::type,
+                       typename _seq::te<T16>::type,
+                       typename _seq::te<T17>::type,
+                       typename _seq::te<T18>::type,
+                       typename _seq::te<T19>::type,
+                       typename _seq::te<T20>::type,
+                       typename _seq::te<T21>::type,
+                       typename _seq::te<T22>::type,
+                       typename _seq::te<T23>::type,
+                       typename _seq::te<T24>::type,
+                       typename _seq::te<T25>::type,
+                       typename _seq::te<T26>::type,
+                       typename _seq::te<T27>::type,
+                       typename _seq::te<T28>::type,
+                       typename _seq::te<T29>::type,
+                       typename _seq::te<T30>::type,
+                       typename _seq::te<T31>::type,
+                       typename _seq::te<T32>::type>
+                       */
+               {
+               private:
+                       typedef tuple<
                                T0,
                                T1,
                                T2,
@@ -85,440 +155,151 @@ namespace roast
                                T29,
                                T30,
                                T31,
-                               T32>
-                               
-                               /*
-                               typename _seq::te<T0>::type,
-                               typename _seq::te<T1>::type,
-                               typename _seq::te<T2>::type,
-                               typename _seq::te<T3>::type,
-                               typename _seq::te<T4>::type,
-                               typename _seq::te<T5>::type,
-                               typename _seq::te<T6>::type,
-                               typename _seq::te<T7>::type,
-                               typename _seq::te<T8>::type,
-                               typename _seq::te<T9>::type,
-                               typename _seq::te<T10>::type,
-                               typename _seq::te<T11>::type,
-                               typename _seq::te<T12>::type,
-                               typename _seq::te<T13>::type,
-                               typename _seq::te<T14>::type,
-                               typename _seq::te<T15>::type,
-                               typename _seq::te<T16>::type,
-                               typename _seq::te<T17>::type,
-                               typename _seq::te<T18>::type,
-                               typename _seq::te<T19>::type,
-                               typename _seq::te<T20>::type,
-                               typename _seq::te<T21>::type,
-                               typename _seq::te<T22>::type,
-                               typename _seq::te<T23>::type,
-                               typename _seq::te<T24>::type,
-                               typename _seq::te<T25>::type,
-                               typename _seq::te<T26>::type,
-                               typename _seq::te<T27>::type,
-                               typename _seq::te<T28>::type,
-                               typename _seq::te<T29>::type,
-                               typename _seq::te<T30>::type,
-                               typename _seq::te<T31>::type,
-                               typename _seq::te<T32>::type>
-                               */
-                       {
-                       private:
-                               typedef tuple<
-                                       T0,
-                                       T1,
-                                       T2,
-                                       T3,
-                                       T4,
-                                       T5,
-                                       T6,
-                                       T7,
-                                       T8,
-                                       T9,
-                                       T10,
-                                       T11,
-                                       T12,
-                                       T13,
-                                       T14,
-                                       T15,
-                                       T16,
-                                       T17,
-                                       T18,
-                                       T19,
-                                       T20,
-                                       T21,
-                                       T22,
-                                       T23,
-                                       T24,
-                                       T25,
-                                       T26,
-                                       T27,
-                                       T28,
-                                       T29,
-                                       T30,
-                                       T31,
-                                       T32> _Base;
-                       public:
-                               //      Template Type Ailiases
-                               typedef T0       _T0;
-                               typedef T1       _T1;
-                               typedef T2       _T2;
-                               typedef T3       _T3;
-                               typedef T4       _T4;
-                               typedef T5       _T5;
-                               typedef T6       _T6;
-                               typedef T7       _T7;
-                               typedef T8       _T8;
-                               typedef T9       _T9;
-                               typedef T10      _T10;
-                               typedef T11      _T11;
-                               typedef T12      _T12;
-                               typedef T13      _T13;
-                               typedef T14      _T14;
-                               typedef T15      _T15;
-                               typedef T16      _T16;
-                               typedef T17      _T17;
-                               typedef T18      _T18;
-                               typedef T19      _T19;
-                               typedef T20      _T20;
-                               typedef T21      _T21;
-                               typedef T22      _T22;
-                               typedef T23      _T23;
-                               typedef T24      _T24;
-                               typedef T25      _T25;
-                               typedef T26      _T26;
-                               typedef T27      _T27;
-                               typedef T28      _T28;
-                               typedef T29      _T29;
-                               typedef T30      _T30;
-                               typedef T31      _T31;
-                               typedef T32      _T32;
-
-                               /*static const int length =
-                                       length_of<T1>::value +
-                                       length_of<T2>::value +
-                                       length_of<T3>::value +
-                                       length_of<T4>::value +
-                                       length_of<T5>::value +
-                                       length_of<T6>::value +
-                                       length_of<T7>::value +
-                                       length_of<T8>::value +
-                                       length_of<T9>::value +
-                                       length_of<T10>::value +
-                                       length_of<T11>::value +
-                                       length_of<T12>::value +
-                                       length_of<T13>::value +
-                                       length_of<T14>::value +
-                                       length_of<T15>::value +
-                                       length_of<T16>::value +
-                                       length_of<T17>::value +
-                                       length_of<T18>::value +
-                                       length_of<T19>::value +
-                                       length_of<T20>::value +
-                                       length_of<T21>::value +
-                                       length_of<T22>::value +
-                                       length_of<T23>::value +
-                                       length_of<T24>::value +
-                                       length_of<T25>::value +
-                                       length_of<T26>::value +
-                                       length_of<T27>::value +
-                                       length_of<T28>::value +
-                                       length_of<T29>::value +
-                                       length_of<T30>::value +
-                                       length_of<T31>::value +
-                                       length_of<T32>::value +
-                                       0;*/
+                               T32> _Base;
+               public:
+                       //      Template Type Ailiases
+                       typedef T0       _T0;
+                       typedef T1       _T1;
+                       typedef T2       _T2;
+                       typedef T3       _T3;
+                       typedef T4       _T4;
+                       typedef T5       _T5;
+                       typedef T6       _T6;
+                       typedef T7       _T7;
+                       typedef T8       _T8;
+                       typedef T9       _T9;
+                       typedef T10      _T10;
+                       typedef T11      _T11;
+                       typedef T12      _T12;
+                       typedef T13      _T13;
+                       typedef T14      _T14;
+                       typedef T15      _T15;
+                       typedef T16      _T16;
+                       typedef T17      _T17;
+                       typedef T18      _T18;
+                       typedef T19      _T19;
+                       typedef T20      _T20;
+                       typedef T21      _T21;
+                       typedef T22      _T22;
+                       typedef T23      _T23;
+                       typedef T24      _T24;
+                       typedef T25      _T25;
+                       typedef T26      _T26;
+                       typedef T27      _T27;
+                       typedef T28      _T28;
+                       typedef T29      _T29;
+                       typedef T30      _T30;
+                       typedef T31      _T31;
+                       typedef T32      _T32;
 
-                               ///////////////////////////////////////////////////
-                               
-                               seq(){}
-                               seq(const T0& t0) : _Base(t0) {}
-                               seq(const T0& t0, const T1& t1) : _Base(t0,t1) {}
-                               seq(const T0& t0, const T1& t1, const T2& t2) : _Base(t0,t1,t2) {}
-                               seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3) : _Base(t0,t1,t2,t3) {}
-                               seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4) : _Base(t0,t1,t2,t3,t4) {}
-                               seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) :
-                                       _Base(t0,t1,t2,t3,t4,t5) {}
-                               seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) :
-                                       _Base(t0,t1,t2,t3,t4,t5,t6) {}
-                               seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6,   const T7& t7) :
-                                       _Base(t0,t1,t2,t3,t4,t5,t6,t7) {}
-                               seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6,   const T7& t7, const T8& t8) :
-                                       _Base(t0,t1,t2,t3,t4,t5,t6,t7,t8) {}
-       
-                               seq(
-                                       const T0& t0,   const T1& t1,   const T2& t2,
-                                       const T3& t3,   const T4& t4,   const T5& t5,
-                                       const T6& t6,   const T7& t7,   const T8& t8,
-                                       const T9& t9) :
-                                       _Base(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9) {}
-       
-                               seq(
-                                       const T0& t0,   const T1& t1,   const T2& t2,
-                                       const T3& t3,   const T4& t4,   const T5& t5,
-                                       const T6& t6,   const T7& t7,   const T8& t8,
-                                       const T9& t9,   const T10& t10) :
-                                       _Base(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10) {}
-                               
-                               ///////////////////////////////////////////////////
+                       /*static const int length =
+                               length_of<T1>::value +
+                               length_of<T2>::value +
+                               length_of<T3>::value +
+                               length_of<T4>::value +
+                               length_of<T5>::value +
+                               length_of<T6>::value +
+                               length_of<T7>::value +
+                               length_of<T8>::value +
+                               length_of<T9>::value +
+                               length_of<T10>::value +
+                               length_of<T11>::value +
+                               length_of<T12>::value +
+                               length_of<T13>::value +
+                               length_of<T14>::value +
+                               length_of<T15>::value +
+                               length_of<T16>::value +
+                               length_of<T17>::value +
+                               length_of<T18>::value +
+                               length_of<T19>::value +
+                               length_of<T20>::value +
+                               length_of<T21>::value +
+                               length_of<T22>::value +
+                               length_of<T23>::value +
+                               length_of<T24>::value +
+                               length_of<T25>::value +
+                               length_of<T26>::value +
+                               length_of<T27>::value +
+                               length_of<T28>::value +
+                               length_of<T29>::value +
+                               length_of<T30>::value +
+                               length_of<T31>::value +
+                               length_of<T32>::value +
+                               0;*/
 
-                               template <typename _It, typename _Param>
-                               bool analyze(_It& it, _Param& param)
-                               {
-                                       T0 t0;
-                                       _It it_work = it;
-                                       if ( t0.analyze(it_work, param) == false )
-                                               return false;
+                       ///////////////////////////////////////////////////
+                       
+                       seq(){}
+                       seq(const T0& t0) : _Base(t0) {}
+                       seq(const T0& t0, const T1& t1) : _Base(t0,t1) {}
+                       seq(const T0& t0, const T1& t1, const T2& t2) : _Base(t0,t1,t2) {}
+                       seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3) : _Base(t0,t1,t2,t3) {}
+                       seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4) : _Base(t0,t1,t2,t3,t4) {}
+                       seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) :
+                               _Base(t0,t1,t2,t3,t4,t5) {}
+                       seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) :
+                               _Base(t0,t1,t2,t3,t4,t5,t6) {}
+                       seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6,   const T7& t7) :
+                               _Base(t0,t1,t2,t3,t4,t5,t6,t7) {}
+                       seq(const T0& t0, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6,   const T7& t7, const T8& t8) :
+                               _Base(t0,t1,t2,t3,t4,t5,t6,t7,t8) {}
 
-                                       seq<T1, T2,     T3,     T4,     T5,     T6,     T7,     T8,     T9,     T10,    T11,    T12,    T13,    T14,    T15,    T16,    T17,    T18,    T19,
-                                               T20,    T21,    T22,    T23,    T24,    T25,    T26,    T27,    T28,    T29,    T30,    T31,    T32> t1;
-                                       if ( t1.analyze(it_work, param) == false )
-                                               return false;
-                                       
-                                       it = it_work;
-                                       return true;
-                               }
-                               
-                               template <typename _Strm, typename _Document>
-                               bool generate(_Strm& strm, _Document& doc) const
-                               {
-                                       /*
-                                       T0 t0;
-                                       if ( t0.generate(strm, doc) == false )
-                                               return false;
+                       seq(
+                               const T0& t0,   const T1& t1,   const T2& t2,
+                               const T3& t3,   const T4& t4,   const T5& t5,
+                               const T6& t6,   const T7& t7,   const T8& t8,
+                               const T9& t9) :
+                               _Base(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9) {}
 
-                                       seq<T1, T2,     T3,     T4,     T5,     T6,     T7,     T8,     T9,     T10,    T11,    T12,    T13,    T14,    T15,    T16,    T17,    T18,    T19,
-                                               T20,    T21,    T22,    T23,    T24,    T25,    T26,    T27,    T28,    T29,    T30,    T31,    T32> t1;
-                                       if ( t1.generate(strm, doc) == false )
-                                               return false;
-                                       
-                                       return true;
-                                       */
-                                       
-                                       return _seq_generate(strm, doc, typename _Base::_Next());
-                               }
-                       };
+                       seq(
+                               const T0& t0,   const T1& t1,   const T2& t2,
+                               const T3& t3,   const T4& t4,   const T5& t5,
+                               const T6& t6,   const T7& t7,   const T8& t8,
+                               const T9& t9,   const T10& t10) :
+                               _Base(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10) {}
                        
-                       ///////////////////////////////////////////////////////////////////////////////////////////////////
+                       ///////////////////////////////////////////////////
 
-                       template <typename T1>
-                       struct seq<T1, true_nop>
+                       template <typename _It, typename _Param>
+                       bool parse(_It& it, _Param& param)
                        {
-                       public:
-                               typedef T1       _T1;
-
-                               //static const unsigned int length = T1::length;
-
-                               template <typename _It, typename _Param>
-                               bool analyze(_It& it, _Param& param)
-                               {
-                                       T1 t1;
-                                       _It it_work = it;
-                                       if ( t1.analyze(it_work, param) == false )
-                                               return false;
-                                       
-                                       it = it_work;
+                               T0 t0;
+                               _It it_work = it;
+                               if ( t0.analyze(it_work, param) == false )
+                                       return false;
 
-                                       return true;
-                               }
+                               seq<T1, T2,     T3,     T4,     T5,     T6,     T7,     T8,     T9,     T10,    T11,    T12,    T13,    T14,    T15,    T16,    T17,    T18,    T19,
+                                       T20,    T21,    T22,    T23,    T24,    T25,    T26,    T27,    T28,    T29,    T30,    T31,    T32> t1;
+                               if ( t1.analyze(it_work, param) == false )
+                                       return false;
                                
-                               template <typename _Strm, typename _Document>
-                               bool generate(_Strm& strm, _Document& doc) const
-                               {
-                                       /*T1 t1;
-                                       if ( t1.generate(strm, doc) == false )
-                                               return false;
-                                               
-                                       return true;*/
-                                       return _seq_generate(strm, doc, EmptyType());
-                               }
-                       };
-
-                       //////////////////////////////////////////////////////////////
-                       
-               }//end of namespace rule
-               
-               //////////////////////////////////////////////////////////////
-               
-               //      generate/analyze() Functions
-               
-               //      analyze
-       /*      template <typename _It, typename _Param>
-               bool analyze(_It& it, _Param& param)
-               {
-                       T1 t1;
-                       _It it_work = it;
-                       if ( t1.analyze(it_work, param) == false )
-                               return false;
-
-                       rule::seq<T2,   T3,     T4,     T5,     T6,     T7,     T8,     T9,     T10,    T11,    T12,    T13,    T14,    T15,    T16,    T17,    T18,    T19,
-                               T20,    T21,    T22,    T23,    T24,    T25,    T26,    T27,    T28,    T29,    T30,    T31,    T32> t2;
-                       if ( t2.analyze(it_work, param) == false )
-                               return false;
+                               it = it_work;
+                               return true;
+                       }
                        
-                       it = it_work;
-                       return true;
-               }*/
-               
-               //      generate
-               template <
-                       typename _Strm,
-                       typename T0,
-                       typename T1,
-                       typename T2,
-                       typename T3,
-                       typename T4,
-                       typename T5,
-                       typename T6,
-                       typename T7,
-                       typename T8,
-                       typename T9,
-                       typename T10,
-                       typename T11,
-                       typename T12,
-                       typename T13,
-                       typename T14,
-                       typename T15,
-                       typename T16,
-                       typename T17,
-                       typename T18,
-                       typename T19,
-                       typename T20,
-                       typename T21,
-                       typename T22,
-                       typename T23,
-                       typename T24,
-                       typename T25,
-                       typename T26,
-                       typename T27,
-                       typename T28,
-                       typename T29,
-                       typename T30,
-                       typename T31,
-                       typename T32>
-               bool generate(_Strm& strm, rule::seq<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,
-                                               T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32>& doc)
-               {
-                       return _seq_generate(strm, doc, typename rule::seq<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,
-                               T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32>::_Next());
-                       /*if ( ::roast::lexical::generate(strm, doc.get<0>()) == false )        
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.next) == false )      
-                               return false;
+                       template <typename _Strm, typename _Document>
+                       bool generate(_Strm& strm, _Document& doc) const
+                       {
+                               /*
+                               T0 t0;
+                               if ( t0.generate(strm, doc) == false )
+                                       return false;
 
-                       /*
-                       if ( ::roast::lexical::generate(strm, doc.get<0>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<1>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<2>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<3>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<4>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<5>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<6>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<7>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<8>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<9>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<10>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<11>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<12>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<13>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<14>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<15>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<16>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<17>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<18>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<19>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<20>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<21>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<22>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<23>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<24>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<25>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<26>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<27>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<28>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<29>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<30>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<31>()) == false ) 
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.get<32>()) == false ) 
-                               return false;
-                       */
+                               seq<T1, T2,     T3,     T4,     T5,     T6,     T7,     T8,     T9,     T10,    T11,    T12,    T13,    T14,    T15,    T16,    T17,    T18,    T19,
+                                       T20,    T21,    T22,    T23,    T24,    T25,    T26,    T27,    T28,    T29,    T30,    T31,    T32> t1;
+                               if ( t1.generate(strm, doc) == false )
+                                       return false;
                                
-                       //return true;
-               }
-               
-               /*
-               //      generate
-               template <typename _Strm, typename _NestType>
-               bool generate(_Strm& strm, _NestType& doc)
-               {
-                       if ( ::roast::lexical::generate(strm, doc.get<0>()) == false )  
-                               return false;
-                       if ( ::roast::lexical::generate(strm, doc.next) == false )      
-                               return false;
+                               return true;
+                               */
                                
-                       return true;
-               }*/
+                               return _seq_generate(strm, doc, typename _Base::_Next());
+                       }
+               };
                
-               template <int N> void get();            //      for gcc 4.4.5 compilable
-
-               //      generate
-               template <typename _Strm, typename _NestType>
-               bool _seq_generate(_Strm& strm, _NestType& doc, const EmptyType& )
-               {
-                       //if ( generate(strm, doc.get<0>()) == false )  
-                       if ( doc.get<0>().generate(strm, doc.get<0>()) == false )       
-                               return false;
-
-                       return true;
-               }
-
-               //      generate
-               template <typename _Strm, typename _NestType, typename _NextType>
-               bool _seq_generate(_Strm& strm, _NestType& doc, const _NextType& )
-               {
-                       //if ( generate(strm, doc.get<0>()) == false )  
-                       if ( doc.get<0>().generate(strm, doc.get<0>()) == false )       
-                               return false;
+               ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-                       if ( _seq_generate(strm, doc.next, typename _NextType::_Next()) == false )      
-                               return false;
-                               
-                       return true;
-               }
-
-       /*      template <typename T1>
+               template <typename T1>
                struct seq<T1, true_nop>
                {
                public:
@@ -526,7 +307,6 @@ namespace roast
 
                        //static const unsigned int length = T1::length;
 
-                       //      analyze (term)
                        template <typename _It, typename _Param>
                        bool analyze(_It& it, _Param& param)
                        {
@@ -540,17 +320,17 @@ namespace roast
                                return true;
                        }
                        
-                       //      analyze (term)
                        template <typename _Strm, typename _Document>
-                       bool generate(_Strm& strm, _Document& doc)
+                       bool generate(_Strm& strm, _Document& doc) const
                        {
-                               T1 t1;
+                               /*T1 t1;
                                if ( t1.generate(strm, doc) == false )
                                        return false;
                                        
-                               return true;
+                               return true;*/
+                               return _seq_generate(strm, doc, EmptyType());
                        }
-               };*/
+               };
 
                //////////////////////////////////////////////////////////////