• <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)計

            亚洲国产另类久久久精品小说 | 色欲av伊人久久大香线蕉影院| 99热成人精品免费久久| 中文字幕一区二区三区久久网站 | 国产aⅴ激情无码久久| 久久超碰97人人做人人爱| 久久精品国产精品亚洲艾草网美妙| 欧美色综合久久久久久| 成人综合伊人五月婷久久| 久久99精品九九九久久婷婷| 久久AV无码精品人妻糸列| 久久久久无码专区亚洲av| 国产精品一区二区久久| 精品久久8x国产免费观看| 精品久久久无码人妻中文字幕豆芽 | 亚洲综合久久久| 欧美伊人久久大香线蕉综合| 久久精品亚洲精品国产欧美| 国内精品久久久久久久久电影网| 久久99久久99精品免视看动漫| 国产69精品久久久久久人妻精品| 波多野结衣久久一区二区| 国内高清久久久久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 伊人久久综合精品无码AV专区| 一本久久知道综合久久| 亚洲成色999久久网站| 国产亚洲精品久久久久秋霞 | 久久亚洲精品中文字幕| 成人妇女免费播放久久久| 久久久WWW成人免费毛片| 色婷婷综合久久久中文字幕 | 国产亚州精品女人久久久久久 | 久久棈精品久久久久久噜噜| 国产亚洲成人久久| www.久久热.com| 久久免费精品视频| 久久久免费精品re6| 怡红院日本一道日本久久 | 精品久久久久久久久久中文字幕 | 99久久精品无码一区二区毛片 |