InputBuffer.hpp
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:4k
源码类别:

编译器/解释器

开发平台:

Others

  1. #ifndef INC_InputBuffer_hpp__
  2. #define INC_InputBuffer_hpp__
  3. /**
  4.  * <b>SOFTWARE RIGHTS</b>
  5.  * <p>
  6.  * ANTLR 2.6.0 MageLang Insitute, 1999
  7.  * <p>
  8.  * We reserve no legal rights to the ANTLR--it is fully in the
  9.  * public domain. An individual or company may do whatever
  10.  * they wish with source code distributed with ANTLR or the
  11.  * code generated by ANTLR, including the incorporation of
  12.  * ANTLR, or its output, into commerical software.
  13.  * <p>
  14.  * We encourage users to develop software with ANTLR. However,
  15.  * we do ask that credit is given to us for developing
  16.  * ANTLR. By "credit", we mean that if you use ANTLR or
  17.  * incorporate any source code into one of your programs
  18.  * (commercial product, research project, or otherwise) that
  19.  * you acknowledge this fact somewhere in the documentation,
  20.  * research report, etc... If you like ANTLR and have
  21.  * developed a nice tool with the output, please mention that
  22.  * you developed it using ANTLR. In addition, we ask that the
  23.  * headers remain intact in our source code. As long as these
  24.  * guidelines are kept, we expect to continue enhancing this
  25.  * system and expect to make other tools available as they are
  26.  * completed.
  27.  * <p>
  28.  * The ANTLR gang:
  29.  * @version ANTLR 2.6.0 MageLang Insitute, 1999
  30.  * @author Terence Parr, <a href=http://www.MageLang.com>MageLang Institute</a>
  31.  * @author <br>John Lilley, <a href=http://www.Empathy.com>Empathy Software</a>
  32.  * @author <br><a href="mailto:pete@yamuna.demon.co.uk">Pete Wells</a>
  33.  */
  34. /**A Stream of characters fed to the lexer from a InputStream that can
  35.  * be rewound via mark()/rewind() methods.
  36.  * <p>
  37.  * A dynamic array is used to buffer up all the input characters.  Normally,
  38.  * "k" characters are stored in the buffer.  More characters may be stored during
  39.  * guess mode (testing syntactic predicate), or when LT(i>k) is referenced.
  40.  * Consumption of characters is deferred.  In other words, reading the next
  41.  * character is not done by conume(), but deferred until needed by LA or LT.
  42.  * <p>
  43.  *
  44.  * @see antlr.CharQueue
  45.  */
  46. #include "antlr/config.hpp"
  47. #include "antlr/CircularQueue.hpp"
  48. #include <string>
  49. ANTLR_BEGIN_NAMESPACE(antlr)
  50. class InputBuffer {
  51. protected:
  52. // char source
  53. // leave to subclasses
  54. // Number of active markers
  55. int nMarkers; // = 0;
  56. // Additional offset used when markers are active
  57. int markerOffset; // = 0;
  58. // Number of calls to consume() since last LA() or LT() call
  59. int numToConsume; // = 0;
  60. // Circular queue
  61. CircularQueue<int> queue;
  62. public:
  63. /** Create a character buffer */
  64. InputBuffer();
  65. virtual ~InputBuffer() {}
  66. /** This method updates the state of the input buffer so that
  67.  *  the text matched since the most recent mark() is no longer
  68.  *  held by the buffer.  So, you either do a mark/rewind for
  69.  *  failed predicate or mark/commit to keep on parsing without
  70.  *  rewinding the input.
  71.  */
  72. void commit();
  73. /** Mark another character for deferred consumption */
  74. virtual void consume();
  75. /** Ensure that the character buffer is sufficiently full */
  76. virtual void fill(int amount);
  77. /** Override this in subclasses to get the next character */
  78. virtual int getChar()=0;
  79. ANTLR_USE_NAMESPACE(std)string getLAChars() const;
  80. ANTLR_USE_NAMESPACE(std)string getMarkedChars() const;
  81. virtual bool isMarked() const;
  82. /** Get a lookahead character */
  83. virtual int LA(int i);
  84. /**Return an integer marker that can be used to rewind the buffer to
  85.  * its current state.
  86.  */
  87. virtual int mark();
  88. /**Rewind the character buffer to a marker.
  89.  * @param mark Marker returned previously from mark()
  90.  */
  91. virtual void rewind(int mark);
  92. protected:
  93. /** Sync up deferred consumption */
  94. void syncConsume();
  95. private:
  96. InputBuffer(const InputBuffer& other);
  97. InputBuffer& operator=(const InputBuffer& other);
  98. };
  99. ANTLR_END_NAMESPACE
  100. #endif //INC_InputBuffer_hpp__