Mercurial > octave
annotate libinterp/corefcn/input.h @ 22196:dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
* oct-parse.in.yy, parse.h: Move parser classes to octave namespace.
* lex.ll, lex.h: Move lexer classes to octave namespace.
* pt-eval.h, pt-eval.cc: Move evaluator class to octave namespace.
Don't define global current evaluator pointer here.
* debug.cc, error.cc, input.cc, input.h, ls-mat-ascii.cc, pt-jit.cc,
sighandlers.cc, utils.cc, variables.cc, ov-usr-fcn.cc, pt-assign.cc,
pt-exp.h, pt-id.cc: Update for namespaces.
* interpreter.cc, interpreter.h (current_evaluator): New global var.
(interpreter::m_evaluator): New data member.
(interpreter::~interpreter): Delete evaluator.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 12 Jul 2016 14:28:07 -0400 |
parents | 0a4c5a90f286 |
children | bac0d6f07a3e |
rev | line source |
---|---|
1 | 1 /* |
2 | |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
3 Copyright (C) 1993-2015 John W. Eaton |
1 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
1 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
1 | 20 |
21 */ | |
22 | |
23 // Use the GNU readline library for command line editing and hisory. | |
24 | |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
25 #if ! defined (octave_input_h) |
383 | 26 #define octave_input_h 1 |
1 | 27 |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
20940
diff
changeset
|
28 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
20940
diff
changeset
|
29 |
1342 | 30 #include <cstdio> |
1 | 31 |
1750 | 32 #include <string> |
33 | |
3255 | 34 #include "oct-time.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20791
diff
changeset
|
35 #include "ovl.h" |
3770 | 36 #include "pager.h" |
3255 | 37 |
3707 | 38 class octave_value; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
39 namespace octave |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
40 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
41 class base_lexer; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
42 } |
3707 | 43 |
9247
b2790fd23800
More export symbols to allow usage from an IDE.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
9237
diff
changeset
|
44 extern OCTINTERP_API FILE *get_input_from_stdin (void); |
1 | 45 |
3804 | 46 // TRUE after a call to completion_matches. |
2299 | 47 extern bool octave_completion_matches_called; |
48 | |
7409 | 49 // TRUE if the plotting system has requested a call to drawnow at |
50 // the next user prompt. | |
7414 | 51 extern OCTINTERP_API bool Vdrawnow_requested; |
7409 | 52 |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7414
diff
changeset
|
53 // TRUE if we are in debugging mode. |
9237
3c1762c7e787
Add missing xxx_API decoration and remove misplaced ones
Michael Goffioul <michael.goffioul@gmail.com>
parents:
8920
diff
changeset
|
54 extern OCTINTERP_API bool Vdebugging; |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7414
diff
changeset
|
55 |
22164
5d4a286061c8
Track line numbers when in debug mode (bug #45764)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22089
diff
changeset
|
56 // TRUE if we are not executing a command direct from debug> prompt. |
5d4a286061c8
Track line numbers when in debug mode (bug #45764)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22089
diff
changeset
|
57 extern OCTINTERP_API bool Vtrack_line_num; |
5d4a286061c8
Track line numbers when in debug mode (bug #45764)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22089
diff
changeset
|
58 |
22171
0a4c5a90f286
Allow tab completion of arrays of structures.
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22164
diff
changeset
|
59 extern std::string find_indexed_expression (const std::string& text); |
0a4c5a90f286
Allow tab completion of arrays of structures.
Lachlan Andrew <lachlanbis@gmail.com>
parents:
22164
diff
changeset
|
60 |
2927 | 61 extern void initialize_command_input (void); |
1 | 62 |
5640 | 63 extern bool octave_yes_or_no (const std::string& prompt); |
64 | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
65 extern octave_value do_keyboard (const octave_value_list& args |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
66 = octave_value_list ()); |
3707 | 67 |
16347
bf8397caeff1
allow add_input_event_hook to accept function handles
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
68 extern void remove_input_event_hook_functions (void); |
bf8397caeff1
allow add_input_event_hook to accept function handles
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
69 |
16528
9bc1f8278966
allow GUI to customize prompts at startup
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
70 extern void set_default_prompts (void); |
9bc1f8278966
allow GUI to customize prompts at startup
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
71 |
5794 | 72 extern std::string VPS4; |
2181 | 73 |
7818
5640a70cbab1
Add Ffilemarker and fix for 'dbstep in'
David Bateman <dbateman@free.fr>
parents:
7787
diff
changeset
|
74 extern char Vfilemarker; |
5640a70cbab1
Add Ffilemarker and fix for 'dbstep in'
David Bateman <dbateman@free.fr>
parents:
7787
diff
changeset
|
75 |
3019 | 76 enum echo_state |
77 { | |
78 ECHO_OFF = 0, | |
79 ECHO_SCRIPTS = 1, | |
80 ECHO_FUNCTIONS = 2, | |
81 ECHO_CMD_LINE = 4 | |
82 }; | |
83 | |
84 extern int Vecho_executing_commands; | |
85 | |
21730
30c53770f47e
use namespace for system time classes
John W. Eaton <jwe@octave.org>
parents:
21244
diff
changeset
|
86 extern octave::sys::time Vlast_prompt_time; |
3165 | 87 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
88 class |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
89 octave_base_reader |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
90 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
91 public: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
92 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
93 friend class octave_input_reader; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
94 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
95 octave_base_reader (octave::base_lexer *lxr) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
96 : count (1), pflag (0), lexer (lxr) |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
97 { } |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
98 |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
99 octave_base_reader (const octave_base_reader& x) |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
100 : count (1), pflag (x.pflag), lexer (x.lexer) |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
101 { } |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
102 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
103 virtual ~octave_base_reader (void) { } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
104 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
105 virtual std::string get_input (bool& eof) = 0; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
106 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
107 virtual std::string input_source (void) const { return in_src; } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
108 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
109 void reset (void) { promptflag (1); } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
110 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
111 void increment_promptflag (void) { pflag++; } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
112 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
113 void decrement_promptflag (void) { pflag--; } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
114 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
115 int promptflag (void) const { return pflag; } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
116 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
117 int promptflag (int n) |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
118 { |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
119 int retval = pflag; |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
120 pflag = n; |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
121 return retval; |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
122 } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
123 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
124 std::string octave_gets (bool& eof); |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
125 |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
126 virtual bool reading_fcn_file (void) const; |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
127 |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
128 virtual bool reading_classdef_file (void) const; |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
129 |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
130 virtual bool reading_script_file (void) const; |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
131 |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
132 virtual bool input_from_terminal (void) const { return false; } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
133 |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
134 virtual bool input_from_file (void) const { return false; } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
135 |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
136 virtual bool input_from_eval_string (void) const { return false; } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
137 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
138 private: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
139 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
140 int count; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
141 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
142 int pflag; |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
143 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
144 octave::base_lexer *lexer; |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
145 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
146 void do_input_echo (const std::string&) const; |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
147 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
148 static const std::string in_src; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
149 }; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
150 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
151 class |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
152 octave_terminal_reader : public octave_base_reader |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
153 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
154 public: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
155 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
156 octave_terminal_reader (octave::base_lexer *lxr = 0) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
157 : octave_base_reader (lxr) |
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
158 { } |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
159 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
160 std::string get_input (bool& eof); |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
161 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
162 std::string input_source (void) const { return in_src; } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
163 |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
164 bool input_from_terminal (void) const { return true; } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
165 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
166 private: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
167 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
168 static const std::string in_src; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
169 }; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
170 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
171 class |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
172 octave_file_reader : public octave_base_reader |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
173 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
174 public: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
175 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
176 octave_file_reader (FILE *f_arg, octave::base_lexer *lxr = 0) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
177 : octave_base_reader (lxr), file (f_arg) { } |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
178 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
179 std::string get_input (bool& eof); |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
180 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
181 std::string input_source (void) const { return in_src; } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
182 |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
183 bool input_from_file (void) const { return true; } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
184 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
185 private: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
186 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
187 FILE *file; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
188 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
189 static const std::string in_src; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
190 }; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
191 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
192 class |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
193 octave_eval_string_reader : public octave_base_reader |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
194 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
195 public: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
196 |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
197 octave_eval_string_reader (const std::string& str, |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
198 octave::base_lexer *lxr = 0) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
199 : octave_base_reader (lxr), eval_string (str) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
200 { } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
201 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
202 std::string get_input (bool& eof); |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
203 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
204 std::string input_source (void) const { return in_src; } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
205 |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
206 bool input_from_eval_string (void) const { return true; } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
207 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
208 private: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
209 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
210 std::string eval_string; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
211 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
212 static const std::string in_src; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
213 }; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
214 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
215 class |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
216 octave_input_reader |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
217 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
218 public: |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
219 octave_input_reader (octave::base_lexer *lxr = 0) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
220 : rep (new octave_terminal_reader (lxr)) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
221 { } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
222 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
223 octave_input_reader (FILE *file, octave::base_lexer *lxr = 0) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
224 : rep (new octave_file_reader (file, lxr)) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
225 { } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
226 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22171
diff
changeset
|
227 octave_input_reader (const std::string& str, octave::base_lexer *lxr = 0) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
16892
diff
changeset
|
228 : rep (new octave_eval_string_reader (str, lxr)) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
229 { } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
230 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
231 octave_input_reader (const octave_input_reader& ir) |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
232 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
233 rep = ir.rep; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
234 rep->count++; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
235 } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
236 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
237 octave_input_reader& operator = (const octave_input_reader& ir) |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
238 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
239 if (&ir != this) |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
240 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
241 rep = ir.rep; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
242 rep->count++; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
243 } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
244 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
245 return *this; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
246 } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
247 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
248 ~octave_input_reader (void) |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
249 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
250 if (--rep->count == 0) |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
251 delete rep; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
252 } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
253 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
254 void reset (void) { return rep->reset (); } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
255 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
256 void increment_promptflag (void) { rep->increment_promptflag (); } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
257 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
258 void decrement_promptflag (void) { rep->decrement_promptflag (); } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
259 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
260 int promptflag (void) const { return rep->promptflag (); } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
261 |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
262 int promptflag (int n) { return rep->promptflag (n); } |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16208
diff
changeset
|
263 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
264 std::string get_input (bool& eof) |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
265 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
266 return rep->get_input (eof); |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
267 } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
268 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
269 std::string input_source (void) const |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
270 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
271 return rep->input_source (); |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
272 } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
273 |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
274 bool input_from_terminal (void) const |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
275 { |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
276 return rep->input_from_terminal (); |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
277 } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
278 |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
279 bool input_from_file (void) const |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
280 { |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
281 return rep->input_from_file (); |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
282 } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
283 |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
284 bool input_from_eval_string (void) const |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
285 { |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
286 return rep->input_from_eval_string (); |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
287 } |
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
288 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
289 private: |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
290 |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
291 octave_base_reader *rep; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
292 }; |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16098
diff
changeset
|
293 |
1 | 294 #endif |