Mercurial > hg > octave-nkf
diff libinterp/parse-tree/lex.h @ 16294:0925d1f6875e
push parser/lexer interface
* lex.h, lex.ll (octave_push_lexer): New class.
(octave_base_lexer:is_push_lexer, octave_base_lexer::at_end_of_file,
octave_base_lexer::at_end_of_buffer): New functions.
(.): Handle special character (ASCII 0x01) that
octave_push_lexer::fill_flex_buffer returns for an end-of-buffer
condition.
* parse.h, oct-parse.in.yy (octave_push_parser): New class.
(octave_base_parser::parser_state): Move to octave_push_parser class.
(octave_base_parser::~octave_base_parser, octave_base_parser::init):
Delete special case for push parser.
* configure.ac (--enable-push-parser): Delete option handling. Both
push and pull parser interfaces will always be defined.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 13 Mar 2013 03:19:35 -0400 |
parents | 57e87ddfee14 |
children | 09f0cb9cac7d |
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.h +++ b/libinterp/parse-tree/lex.h @@ -438,12 +438,18 @@ void init (void); + virtual bool is_push_lexer (void) const { return false; } + virtual void reset (void); void prep_for_file (void); virtual int fill_flex_buffer (char *buf, unsigned int max_size) = 0; + bool at_end_of_buffer (void) const { return input_buf.empty (); } + + bool at_end_of_file (void) const { return input_buf.at_eof (); } + int handle_end_of_input (void); char *flex_yytext (void); @@ -646,4 +652,58 @@ octave_lexer& operator = (const octave_lexer&); }; +class +octave_push_lexer : public octave_base_lexer +{ +public: + + octave_push_lexer (const std::string& input = std::string (), + bool eof = false) + : octave_base_lexer (), pflag (1) + { + append_input (input, eof); + } + + bool is_push_lexer (void) const { return true; } + + void reset (void) + { + promptflag (1); + + octave_base_lexer::reset (); + } + + void append_input (const std::string& input, bool eof) + { + input_buf.fill (input, eof); + } + + void increment_promptflag (void) { pflag++; } + + void decrement_promptflag (void) { pflag--; } + + int promptflag (void) const { return pflag; } + + int promptflag (int n) + { + int retval = pflag; + pflag = n; + return retval; + } + + std::string input_source (void) const { return "push buffer"; } + + int fill_flex_buffer (char *buf, unsigned int max_size); + +protected: + + int pflag; + + // No copying! + + octave_push_lexer (const octave_push_lexer&); + + octave_push_lexer& operator = (const octave_push_lexer&); +}; + #endif