OSDN Git Service

lexical:
authorMyun2 <myun2@nwhite.info>
Wed, 21 Jul 2010 02:53:48 +0000 (11:53 +0900)
committerMyun2 <myun2@nwhite.info>
Wed, 21 Jul 2010 02:53:48 +0000 (11:53 +0900)
seq2, seq3実装
requre_whitespace, no_requre_whitespace としてこれをtypedef。no_requre_whitespace を実装
その他色々。一応とりあえずコンパイル通るように。

roast/include/roast/lexical/structure_base.hpp
roast/include/roast/xml/roast_xml/roast_xml_sax_parser.hpp
roast/include/roast/xml/roast_xml/structure.hpp
roast/test/lexical_test/parser_test.cpp

index ff22869..5bc5e93 100644 (file)
@@ -18,14 +18,46 @@ namespace roast
                        {
                        };
 
+                       ////////////////////////////////////////////////////////////////
                        template <typename T1, typename T2>
                        class seq2
                        {
-                       };
+                       public:
+                               template <typename T>
+                               bool analyze(const T& it)
+                               {
+                                       T1 t1;
+                                       if ( t1.analyze(it) == false )
+                                               return false;
+                                       T1 t2;
+                                       if ( t2.analyze(it) == false )
+                                               return false;
+                                       return true;
+                               }
+                       };
+                       ////////////////////////////////////////////////////////////////
+
                        template <typename T1, typename T2, typename T3>
                        class seq3
                        {
-                       };
+                       public:
+                               template <typename T>
+                               bool analyze(const T& it)
+                               {
+                                       T1 t1;
+                                       if ( t1.analyze(it) == false )
+                                               return false;
+                                       T1 t2;
+                                       if ( t2.analyze(it) == false )
+                                               return false;
+                                       T1 t3;
+                                       if ( t3.analyze(it) == false )
+                                               return false;
+                                       return true;
+                               }
+                       };
+                       ////////////////////////////////////////////////////////////////
+
                        template <typename T1, typename T2, typename T3, typename T4>
                        class seq4
                        {
@@ -62,22 +94,44 @@ namespace roast
                        {
                        };
 
-                       class _reqws
-                       {
-                       };
-                       class _nrqws
-                       {
-                       };
+                       ///////////////////////////////////////////////////
 
-                       class reqws
-                       {
-                       };
-                       class nrqws
+                       typedef
+                         class requre_whitespace
                        {
-                       };
-                       class optws
-                       {
-                       };
+                       }
+                       _reqws, reqws;
+
+                       /////////////////////
+
+                       typedef
+                         class no_requre_whitespace
+                       {
+                       public:
+                               template <typename T>
+                               bool analyze(const T& it)
+                               {
+                                       for(;;)
+                                       {
+                                               //char c = it.operator *();
+                                               switch(*it)
+                                               {
+                                               case ' ':
+                                               case '\t':
+                                               case '\r':
+                                               case '\n':
+                                                       continue;
+                                               }
+
+                                               break;
+                                       }
+
+                                       return true;
+                               }
+                       }
+                       _nrqws, _noreqws, nrqws, noreqws, optws;
+
+                       ///////////////////////////////////////////////////
                }
 
                ///////////////////////////////////////
@@ -85,6 +139,12 @@ namespace roast
                template <typename T>
                class structure_base
                {
+               public:
+                       template <typename T>
+                       bool analyze(const T& s)
+                       {
+                               return ( *s == '>' );
+                       }
                };
        }
 }
index a6671c6..1770faa 100644 (file)
@@ -14,14 +14,15 @@ namespace roast
        {
                ////////////////////////////////////////////////////////////////
 
-               class sax_parser_impl
+               /*class sax_parser_impl
                {
                public:
                        bool analyze(const char* s)
                        {
                                return true;
                        }
-               };
+               };*/
+               typedef _structure sax_parser_impl;
 
                ////////////////////////////////////////////////////////////////
 
index 198bda3..08f1d96 100644 (file)
@@ -120,12 +120,18 @@ namespace roast
                
                ////////////////////////////////////////////////////
                
-               typedef lexical::structure_base<
+               /*typedef lexical::structure_base<
                        ::roast::lexical::structure::seq3<
                                structure::nothing_<structure::header>,
                                structure::nothing_<structure::body>,
                                structure::nothing
                        >
+               > _structure;*/
+               typedef ::roast::lexical::structure::seq3
+               <
+                       structure::nothing_<structure::header>,
+                       structure::nothing_<structure::body>,
+                       structure::nothing
                > _structure;
        }
 }
index 9cc900c..5b26e31 100644 (file)
@@ -13,7 +13,8 @@ int main()
        fread(work,sizeof(work),1,fp);
 
        //roast_xml::dom_parser wss("aaa");
-       roast_xml::sax_parser wss(work);
+       roast_xml::sax_parser sax(work);
+       sax.analyze();
 
        return 0;
 }