Mercurial > hg > octave-nkf
diff libinterp/parse-tree/lex.h @ 16224:4a848eb52de2
use stack for tracking lexer start states
* lex.h (octave_lexer::start_state_stack): New member variable.
(octave_lexer::push_start_state, octave_lexer::pop_start_state,
octave_lexer::clear_start_state, octave_lexer::start_state,
octave_lexer::display_start_state): New functions.
* lex.ll (INPUT_FILE_START): Rename from INPUT_FILE_BEGIN.
Use push_start_state and pop_start_state instead of switching flex
start states directly with the flex BEGIN macro.
(octave_lexer::init, octave_lexer::reset): Clear start state stack.
(octave_lexer::prep_for_file, octave_lexer::process_comment,
octave_lexer::handle_close_bracket): Don't use OCTAVE_YYG macro.
(octave_lexer::display_start_state): Rename from display_state.
Eliminate argument. Display current start state.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 08 Mar 2013 10:46:13 -0500 |
parents | e7ff32e7cf82 |
children | e19b1632d7c1 |
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.h +++ b/libinterp/parse-tree/lex.h @@ -524,11 +524,23 @@ return input_source () == "eval_string"; } + void push_start_state (int state); + + void pop_start_state (void); + + void clear_start_state (void); + + int start_state (void) const { return start_state_stack.top (); } + + void display_start_state (void) const; + // For unwind protect. static void cleanup (octave_lexer *lexer) { delete lexer; } private: + std::stack<int> start_state_stack; + // No copying! octave_lexer (const octave_lexer&);