xsil/Xreader.hh

00001 #ifndef XSIL_XREADER_HH
00002 #define XSIL_XREADER_HH
00003 
00004 #include <iosfwd>
00005 #include <string>
00006 #include "lxr.hh"
00007 #include "xsil.hh"
00008 #include "attrList.hh"
00009 
00010 namespace xsil {
00011 
00012   class array;
00013   class ligolw;
00014   class XSIL;
00015   class param;
00016   class Stream;
00017   class table;
00018   class time;
00019 
00037 class Xreader {
00038 public:
00039 
00042   enum LxrTokens {
00043     tkEnd,       // end of file
00044     tkWord,      // word
00045     tkString,    // quoted string
00046     tkNumber,    // number
00047     tkEqual,     // =
00048     tkOpenTag,   // <
00049     tkOpenETag,  // </
00050     tkOpenCTag,  // <!
00051     tkOpenHead,  // <?
00052     tkEndTag,    // >
00053     tkEndSTag,   // />
00054     tkCloseHead, // ?>
00055     tkEscape,    // &opr;
00056     tkQMark
00057   };
00058 
00059 private:
00060   enum CharGroups {
00061     kInvChar,
00062     kAlpha,
00063     kNumer,
00064     kSpace
00065   };
00066 
00067   enum LxrStates {
00068     stStart,     // start state
00069     stInWord,    // in word
00070     stInString,  // quoted string
00071     stNumInt,    // number nnnn
00072     stNumFix,    // nnn.[nnn]
00073     stNumExp ,   // nnn[.nnn]e
00074     stNumSExp,   // nnn[.nnn]e[snnn]
00075     stTag,       // <[]
00076     stQMark,     // ?
00077     stETag,      // /
00078     stEscape,    // &[opr]
00079     stNStates
00080   };
00081 
00082 public:
00087     Xreader(std::istream& istr);
00088 
00092     ~Xreader(void);
00093 
00100     array* readArray(const attr_list& a, int hdronly);
00101 
00106     xobj* readDoc(void);
00107 
00112     void readEndTag(const std::string& endtag);
00113 
00116     void readHeader(void);
00117 
00120     ligolw* readLigoLW(const attr_list& a, int tagonly);
00121 
00124     xobj* readObject(void);
00125 
00128     param* readParam(const attr_list& a, int tagonly);
00129 
00132     Stream* readStream(const attr_list& a, int tagonly);
00133 
00136     table* readTable(const attr_list& a, int tagonly);
00137 
00140     time* readTime(const attr_list& a, int tagonly);
00141 
00150     int readTag(std::string& name, attr_list& attrs);
00151 
00156     void setDebug(int lvl);
00157 
00158 private:
00159     //----------------------------------  Set op loexographic analysis
00160     void lxSetup(void);
00161 
00162     //----------------------------------  Get a syntactic token
00163     LxrTokens getToken(std::string& token);
00164 
00165 private:
00166     std::istream& mStream;
00167     lxr           mLexr;
00168     int           mDebug;
00169 };     // xsil::Xreader
00170 
00171 }      // namespace xsil
00172 
00173 #endif  //   XSIL_XREADER_HH

Generated on Sun Mar 8 19:20:54 2009 for dmt by  doxygen 1.5.4