• <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 ); // 退幾個(gè)?
             49  void RebackNearestWordByName( const char *szWord ); // 退到哪個(gè)?
             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 閱讀(258) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 編譯原理/腳本語(yǔ)言開(kāi)發(fā)

            統(tǒng)計(jì)

            久久毛片一区二区| 久久亚洲国产精品123区| 狠狠久久综合伊人不卡| 亚洲人成无码网站久久99热国产| 久久人人爽人人爽人人片AV不 | 久久AⅤ人妻少妇嫩草影院| 色欲综合久久躁天天躁| 久久99热狠狠色精品一区| 久久久国产打桩机| 久久精品国产色蜜蜜麻豆| 人妻精品久久久久中文字幕69| 欧美精品一区二区精品久久| 久久无码中文字幕东京热| 国产精品美女久久久免费| 奇米影视7777久久精品| 欧美亚洲国产精品久久高清| 久久精品成人欧美大片| 精品久久久久久久| www.久久热.com| 东京热TOKYO综合久久精品| 狠狠色丁香久久婷婷综合| 一级a性色生活片久久无少妇一级婬片免费放| 国内精品久久久久| 久久国产精品久久国产精品| 久久香蕉超碰97国产精品| 人妻无码中文久久久久专区| 亚洲愉拍99热成人精品热久久| 久久精品国产欧美日韩99热| 色青青草原桃花久久综合| 亚洲欧美日韩久久精品| 亚洲色欲久久久久综合网| 一级A毛片免费观看久久精品| 久久99国产精品久久99小说| 中文字幕精品无码久久久久久3D日动漫| 国产精品永久久久久久久久久| 久久国产一区二区| 久久激情亚洲精品无码?V| 亚洲精品无码久久久| 久久久无码精品亚洲日韩京东传媒| 2021久久精品免费观看| 久久亚洲精品国产精品|