• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

             

              1 #ifndef PATH_INTERPRETER
              2 #define PATH_INTERPRETER
              3 
              4 #define WIN32_LEAN_AND_MEAN
              5 #include <windows.h>
              6 #include <string.h>
              7 #include <stdlib.h>
              8 #include <ctype.h>
              9 #include <string>
             10 #include <list>
             11 
             12 using std::string;
             13 using std::list;
             14 
             15 #define MAX_WORD_LEN 8 // 8 Bytes
             16 
             17 class ContexScan;
             18 
             19 // CPathScriptLoader
             20 class CPathScriptLoader
             21 {
             22 public:
             23  string Context;
             24 
             25  void LoadScript( const char *szFile );
             26 };
             27 
             28 //
             29 // Contex Lex
             30 //
             31 //
             32 // ContexScan
             33 class ContexScan
             34 {
             35 public:
             36  enum ScanState { WORD, NOPRINT, };
             37 
             38 public:
             39  ContexScan();
             40  ~ContexScan();
             41 
             42  void SetExpression( const char *szExpr );
             43 
             44  bool SkipWord( const char *szWord );
             45  char *  GetNextWord();
             46  char *  CurrentWord() { return m_szCurrWord; }
             47  bool NextWord();
             48  void RebackWordByCount( int n ); // 退幾個?
             49  void RebackNearestWordByName( const char *szWord ); // 退到哪個?
             50 
             51 private:
             52  char * m_szExpr;
             53  char * m_pLastChar;
             54  char * m_pCurrChar;
             55  char m_szCurrWord[MAX_WORD_LEN];
             56  ScanState m_eState;
             57 };
             58 
             59 //
             60 // Syntax Tree Nodes
             61 //
             62 // AbstractNode
             63 class AbstractNode
             64 {
             65 public:
             66    AbstractNode( ContexScan& contex );
             67  virtual ~AbstractNode();
             68 
             69  virtual void Parse() = 0;
             70 
             71 protected:
             72  ContexScan& m_RefContexScan;
             73  list<AbstractNode *> m_Nodes;
             74 };
             75 
             76 // ProgramNode
             77 class ProgramNode : public AbstractNode
             78 {
             79 public:
             80    ProgramNode( ContexScan& contex );
             81  virtual ~ProgramNode();
             82 
             83  virtual void Parse();
             84 };
             85 
             86 // CommandListNode
             87 class CommandListNode : public AbstractNode
             88 {
             89 public:
             90    CommandListNode( ContexScan& contex );
             91  virtual ~CommandListNode();
             92 
             93  virtual void Parse();
             94 };
             95 
             96 // CommandNode
             97 class CommandNode : public AbstractNode
             98 {
             99 public:
            100    CommandNode( ContexScan& contex );
            101  virtual ~CommandNode();
            102 
            103  virtual void Parse();
            104 };
            105 
            106 // RepeatNode
            107 class RepeatNode : public AbstractNode
            108 {
            109 public:
            110    RepeatNode( ContexScan& contex );
            111  virtual ~RepeatNode();
            112 
            113  virtual void Parse();
            114 };
            115 
            116 // BlockNode
            117 class BlockNode : public AbstractNode
            118 {
            119 public:
            120    BlockNode( ContexScan& contex );
            121  virtual ~BlockNode();
            122 
            123  virtual void Parse();
            124 };
            125 
            126 // PrimitiveNode
            127 class PrimitiveNode : public AbstractNode
            128 {
            129 public:
            130    PrimitiveNode( ContexScan& contex );
            131  virtual ~PrimitiveNode();
            132 
            133  virtual void Parse();
            134 };
            135 
            136 // CPathInterpret
            137 // The Interpreter Facade interface
            138 class CPathInterpret
            139 {
            140 public:
            141  enum InterpretMode { NDEBUG, DEBUG, };
            142 
            143 public:
            144  static InterpretMode m_Mode;
            145 
            146 public:
            147  void LoadScript( const char *szFile );
            148  void Interpret( InterpretMode mode = NDEBUG );
            149 
            150 private:
            151  CPathScriptLoader m_ScriptLoader;
            152  ContexScan   m_ContexScaner;
            153 
            154 };
            155 
            156 #endif // PATH_INTERPRETER
            157 
            posted on 2009-12-23 22:03 Reno 閱讀(247) 評論(0)  編輯 收藏 引用 所屬分類: 編譯原理/腳本語言開發(fā)

            統(tǒng)計

            99精品国产在热久久| 91久久精品国产91性色也| 久久亚洲中文字幕精品一区四| 精品无码久久久久久久久久| 理论片午午伦夜理片久久| 亚洲va中文字幕无码久久| 91久久精品国产免费直播| 一级女性全黄久久生活片免费| 久久久国产打桩机| 久久不射电影网| 亚洲精品第一综合99久久 | 久久高潮一级毛片免费| 亚洲国产成人精品无码久久久久久综合 | 国产精品久久久99| 亚洲精品蜜桃久久久久久| 亚洲αv久久久噜噜噜噜噜| 91久久精品电影| 久久99精品久久久久久hb无码| 7国产欧美日韩综合天堂中文久久久久 | 久久精品国产日本波多野结衣| 久久精品国产亚洲AV嫖农村妇女| 久久精品国产精品亚洲下载| 99久久国产亚洲综合精品| 久久香蕉国产线看观看乱码| 国产毛片欧美毛片久久久| 久久综合精品国产一区二区三区| 国产精品久久久久久久久鸭 | 99久久精品影院老鸭窝| 精品久久久久久国产| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久777国产线看观看精品| 亚洲国产精品无码久久久秋霞2| 久久成人18免费网站| 国产精品熟女福利久久AV| 国产美女久久久| 久久综合中文字幕| 青草影院天堂男人久久| 久久亚洲精品视频| 国产精品亚洲综合专区片高清久久久 | 国产成人无码久久久精品一| 一本色道久久88—综合亚洲精品|