⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 elexscanner.h

📁 用于词法分析的词法分析器
💻 H
字号:
/*  $Id: ElexScanner.h,v 1.9 1997/03/19 12:16:02 matt Exp $  Default Elex scanner class.  (c) Matt Phillips 1996.  */#ifndef _ELEX_SCAN_H#define _ELEX_SCAN_H#include <std/string.h>#include <compiler/ErrorMessage.h>#include <contain/CircularQueue.h>#include "XInputStream.h"#include "ElexScannerBase.h"class ElexScanner : public ElexScannerBase{public:  ElexScanner (ElexScannerData &d, XInputStream &i, int lookahead = 1);  XInputStream &getInput () {return input;}  virtual int getNext ();  virtual string &getText () {return text;}  virtual const string &getText () const {return text;}  int getTextLine () const {return symbolLine;}  int getTextColumn () const {return symbolColumn;}  virtual void error (const string &message);  virtual void warning (const string &message);  const ErrorMessageList &getErrors () const {return errors;}protected:  // mark used to allow scanner to backtrack.  class BacktrackMark  {  public:    BacktrackMark () {}    // place mark at current point in s.    void mark (const ElexScanner &s);    // sets stream to be at this mark.    void jump (ElexScanner &s) const;    int isValid (const ElexScanner &s) const    {      return streamMark.isValid (s.input);    }  protected:    XInputStream::BacktrackMark streamMark;    const ElexState *state;    int symbolCount;  };  // mark used to mark the start/end of symbols in the stream.  class SymbolMark  {  public:    int production;    XInputStream::BacktrackMark mark;    int markCount;    int operator > (const SymbolMark &m) const {return mark > m.mark;}  };  // used to store frozen symbols.  class Symbol  {  public:    string text;    int production;    int line, column;  };  typedef CircularQueue<SymbolMark> SymbolMarkStack;  typedef CircularQueue<BacktrackMark> BacktrackMarkStack;  typedef CircularQueue<Symbol> SymbolStack;  const ElexState *state;  XInputStream &input;  ErrorMessageList errors;  string text;  int symbolLine, symbolColumn;  int lookahead;  BacktrackMarkStack marks;	// backtrack marks  SymbolMarkStack symbolMarks;	// currently matched symbols  SymbolMarkStack bestMatch;	// the best match so far  SymbolStack symbols;		// frozen symbols  static const ElexState eofState; // used to reprsent EOF condition  void reset ();  void primeSymbols ();  void handleNoAccept ();  void mark ();  void freeze (SymbolMarkStack &symbolMarkStack);  void makeCurrent (const Symbol &sym);  int backtrack ();  void match (int production);  virtual int invokeProduction (int i) = 0;  friend class ElexScanner::BacktrackMark;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -