Mercurial > hg > octave-nkf
diff libinterp/parse-tree/parse.h @ 16287:04a7953496a7
create base class for parser; use reference for curr_lexer
* lex.h, lex.ll (octave_base_parser): New base class for parser
class. Move most of previous octave_parser class here. Use reference
for curr_lexer object instead of pointer. Change all uses.
(octave_parser): Derive from octave_base_parser.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 12 Mar 2013 00:18:28 -0400 |
parents | c5e5f6ccac5d |
children | fe3b9a51e625 |
line wrap: on
line diff
--- a/libinterp/parse-tree/parse.h +++ b/libinterp/parse-tree/parse.h @@ -126,54 +126,28 @@ extern octave_lexer *CURR_LEXER; class -octave_parser +octave_base_parser { public: - octave_parser (void) - : endfunction_found (false), - autoloading (false), fcn_file_from_relative_lookup (false), - parsing_subfunctions (false), max_fcn_depth (0), - curr_fcn_depth (0), primary_fcn_scope (-1), - curr_class_name (), function_scopes (), primary_fcn_ptr (0), - stmt_list (0), - curr_lexer (new octave_lexer ()), parser_state (0) - { - init (); - } - - octave_parser (FILE *file) + octave_base_parser (octave_lexer& lxr) : endfunction_found (false), autoloading (false), fcn_file_from_relative_lookup (false), parsing_subfunctions (false), max_fcn_depth (0), curr_fcn_depth (0), primary_fcn_scope (-1), curr_class_name (), function_scopes (), primary_fcn_ptr (0), stmt_list (0), - curr_lexer (new octave_lexer (file)), parser_state (0) + curr_lexer (lxr), parser_state (0) { init (); } - octave_parser (const std::string& eval_string) - : endfunction_found (false), - autoloading (false), fcn_file_from_relative_lookup (false), - parsing_subfunctions (false), max_fcn_depth (0), - curr_fcn_depth (0), primary_fcn_scope (-1), - curr_class_name (), function_scopes (), primary_fcn_ptr (0), - stmt_list (0), - curr_lexer (new octave_lexer (eval_string)), parser_state (0) - { - init (); - } - - ~octave_parser (void); + virtual ~octave_base_parser (void); void init (void); void reset (void); - int run (void); - // Error mesages for mismatched end tokens. void end_error (const char *type, token::end_tok_type ettype, int l, int c); @@ -407,14 +381,41 @@ tree_statement_list *stmt_list; // State of the lexer. - octave_lexer *curr_lexer; + octave_lexer& curr_lexer; // Internal state of the parser. Only used if USE_PUSH_PARSER is // defined. void *parser_state; - // For unwind protect. - static void cleanup (octave_parser *parser) { delete parser; } +private: + + // No copying! + + octave_base_parser (const octave_base_parser&); + + octave_base_parser& operator = (const octave_base_parser&); +}; + +class +octave_parser : public octave_base_parser +{ +public: + + octave_parser (void) + : octave_base_parser (*(new octave_lexer ())) + { } + + octave_parser (FILE *file) + : octave_base_parser (*(new octave_lexer (file))) + { } + + octave_parser (const std::string& eval_string) + : octave_base_parser (*(new octave_lexer (eval_string))) + { } + + ~octave_parser (void) { } + + int run (void); private: