Mercurial > hg > octave-nkf
annotate libinterp/parse-tree/lex.h @ 18702:fa53284d4511 draft lyh
Fix warnings
author | LYH <lyh.kernel@gmail.com> |
---|---|
date | Fri, 21 Mar 2014 14:59:39 -0400 |
parents | 1af5ee5f3076 |
children | 932aca9a7c57 |
rev | line source |
---|---|
1 | 1 /* |
2 | |
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17733
diff
changeset
|
3 Copyright (C) 1993-2013 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 | |
383 | 23 #if !defined (octave_lex_h) |
24 #define octave_lex_h 1 | |
1 | 25 |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
26 #include <deque> |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
27 #include <limits> |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
28 #include <list> |
16101
8d19626b38ae
provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents:
16100
diff
changeset
|
29 #include <set> |
11464
21b5284fa78d
avoid error when parsing nested functions
John W. Eaton <jwe@octave.org>
parents:
11367
diff
changeset
|
30 #include <stack> |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
31 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
32 #include "comment-list.h" |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
33 #include "input.h" |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
34 #include "token.h" |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
35 |
4867 | 36 // Is the given string a keyword? |
37 extern bool is_keyword (const std::string& s); | |
38 | |
1826 | 39 // For communication between the lexer and parser. |
40 | |
3585 | 41 class |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
42 lexical_feedback |
1826 | 43 { |
44 public: | |
45 | |
16320
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
46 // Track symbol table information when parsing functions. |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
47 |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
48 class symbol_table_context |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
49 { |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
50 public: |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
51 |
17796
6b51f5f44aea
find symbols in proper scope when debugging (bug #40397)
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
52 symbol_table_context (void) : frame_stack () { } |
16320
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
53 |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
54 void clear (void) |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
55 { |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
56 while (! frame_stack.empty ()) |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
57 frame_stack.pop (); |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
58 } |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
59 |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
60 bool empty (void) const { return frame_stack.empty (); } |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
61 |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
62 void pop (void) |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
63 { |
17796
6b51f5f44aea
find symbols in proper scope when debugging (bug #40397)
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
64 if (empty ()) |
6b51f5f44aea
find symbols in proper scope when debugging (bug #40397)
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
65 panic_impossible (); |
6b51f5f44aea
find symbols in proper scope when debugging (bug #40397)
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
66 |
16320
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
67 frame_stack.pop (); |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
68 } |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
69 |
17796
6b51f5f44aea
find symbols in proper scope when debugging (bug #40397)
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
70 void push (symbol_table::scope_id scope = symbol_table::current_scope ()) |
16320
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
71 { |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
72 frame_stack.push (scope); |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
73 } |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
74 |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
75 symbol_table::scope_id curr_scope (void) const |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
76 { |
17796
6b51f5f44aea
find symbols in proper scope when debugging (bug #40397)
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
77 return empty () ? symbol_table::current_scope () : frame_stack.top (); |
16320
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
78 } |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
79 |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
80 private: |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
81 |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
82 std::stack<symbol_table::scope_id> frame_stack; |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
83 }; |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
84 |
16104
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
85 // Track nesting of square brackets, curly braces, and parentheses. |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
86 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
87 class bbp_nesting_level |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
88 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
89 private: |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
90 |
16107
3b791008b88e
give name to anonymous enum
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
91 enum bracket_type |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
92 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
93 BRACKET = 1, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
94 BRACE = 2, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
95 PAREN = 3, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
96 ANON_FCN_BODY = 4 |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
97 }; |
16104
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
98 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
99 public: |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
100 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
101 bbp_nesting_level (void) : context () { } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
102 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
103 bbp_nesting_level (const bbp_nesting_level& nl) : context (nl.context) { } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
104 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
105 bbp_nesting_level& operator = (const bbp_nesting_level& nl) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
106 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
107 if (&nl != this) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
108 context = nl.context; |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
109 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
110 return *this; |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
111 } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
112 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
113 ~bbp_nesting_level (void) { } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
114 |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
115 void reset (void) |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
116 { |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
117 while (! context.empty ()) |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
118 context.pop (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
119 } |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
120 |
16104
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
121 void bracket (void) { context.push (BRACKET); } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
122 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
123 bool is_bracket (void) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
124 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
125 return ! context.empty () && context.top () == BRACKET; |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
126 } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
127 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
128 void brace (void) { context.push (BRACE); } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
129 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
130 bool is_brace (void) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
131 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
132 return ! context.empty () && context.top () == BRACE; |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
133 } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
134 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
135 void paren (void) { context.push (PAREN); } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
136 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
137 bool is_paren (void) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
138 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
139 return ! context.empty () && context.top () == PAREN; |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
140 } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
141 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
142 void anon_fcn_body (void) { context.push (ANON_FCN_BODY); } |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
143 |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
144 bool is_anon_fcn_body (void) |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
145 { |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
146 return ! context.empty () && context.top () == ANON_FCN_BODY; |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
147 } |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
148 |
16104
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
149 bool is_bracket_or_brace (void) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
150 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
151 return (! context.empty () |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
152 && (context.top () == BRACKET || context.top () == BRACE)); |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
153 } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
154 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
155 bool none (void) { return context.empty (); } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
156 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
157 void remove (void) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
158 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
159 if (! context.empty ()) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
160 context.pop (); |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
161 } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
162 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
163 void clear (void) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
164 { |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
165 while (! context.empty ()) |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
166 context.pop (); |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
167 } |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
168 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
169 private: |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
170 |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
171 std::stack<int> context; |
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
172 }; |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
173 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
174 class token_cache |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
175 { |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
176 public: |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
177 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
178 // Store an "unlimited" number of tokens. |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
179 token_cache (size_t sz_arg = std::numeric_limits<size_t>::max ()) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
180 : buffer (), sz (sz_arg) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
181 { } |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
182 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
183 void push (token *tok) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
184 { |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
185 if (buffer.size () == sz) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
186 pop (); |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
187 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
188 buffer.push_front (tok); |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
189 } |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
190 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
191 void pop (void) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
192 { |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
193 if (! empty ()) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
194 { |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
195 delete buffer.back (); |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
196 buffer.pop_back (); |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
197 } |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
198 } |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
199 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
200 // Direct access. |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
201 token *at (size_t n) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
202 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
203 return empty () ? 0 : buffer.at (n); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
204 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
205 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
206 const token *at (size_t n) const |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
207 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
208 return empty () ? 0 : buffer.at (n); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
209 } |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
210 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
211 // Most recently pushed. |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
212 token *front (void) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
213 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
214 return empty () ? 0 : buffer.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
215 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
216 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
217 const token *front (void) const |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
218 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
219 return empty () ? 0 : buffer.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
220 } |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
221 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
222 token *back (void) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
223 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
224 return empty () ? 0 : buffer.back (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
225 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
226 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
227 const token *back (void) const |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
228 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
229 return empty () ? 0 : buffer.back (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
230 } |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
231 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
232 // Number of elements currently in the buffer, max of sz. |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
233 size_t size (void) const { return buffer.size (); } |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
234 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
235 bool empty (void) const { return buffer.empty (); } |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
236 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
237 void clear (void) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
238 { |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
239 while (! empty ()) |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
240 pop (); |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
241 } |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
242 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
243 private: |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
244 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
245 std::deque<token *> buffer; |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
246 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
247 size_t sz; |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
248 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
249 // No copying! |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
250 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
251 token_cache (const token_cache&); |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
252 |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
253 token_cache& operator = (const token_cache&); |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
254 }; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
255 |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
256 lexical_feedback (void) |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
257 : end_of_input (false), at_beginning_of_statement (true), |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
258 looking_at_anon_fcn_args (false), looking_at_return_list (false), |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
259 looking_at_parameter_list (false), looking_at_decl_list (false), |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
260 looking_at_initializer_expression (false), |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
261 looking_at_matrix_or_assign_lhs (false), |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
262 looking_for_object_index (false), |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
263 looking_at_indirect_ref (false), parsing_class_method (false), |
16211
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
264 parsing_classdef (false), maybe_classdef_get_set_method (false), |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
265 parsing_classdef_get_method (false), |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
266 parsing_classdef_set_method (false), |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
267 quote_is_transpose (false), force_script (false), |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
268 reading_fcn_file (false), reading_script_file (false), |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
269 reading_classdef_file (false), |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
270 input_line_number (1), current_input_column (1), |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
271 bracketflag (0), braceflag (0), |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
272 looping (0), defining_func (0), looking_at_function_handle (0), |
18223
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
17796
diff
changeset
|
273 block_comment_nesting_level (0), command_arg_paren_count (0), |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
17796
diff
changeset
|
274 token_count (0), current_input_line (), comment_text (), |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
17796
diff
changeset
|
275 help_text (), string_text (), string_line (0), string_column (0), |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
276 fcn_file_name (), fcn_file_full_name (), looking_at_object_index (), |
16207
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
277 parsed_function_name (), pending_local_variables (), |
16320
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
278 symtab_context (), nesting_level (), tokens () |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
279 { |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
280 init (); |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
281 } |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
282 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
283 ~lexical_feedback (void); |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
284 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
285 void init (void); |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
286 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
287 void reset (void); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
288 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
289 int previous_token_value (void) const; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
290 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
291 bool previous_token_value_is (int tok_val) const; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
292 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
293 void mark_previous_token_trailing_space (void); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
294 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
295 bool space_follows_previous_token (void) const; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
296 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
297 bool previous_token_is_binop (void) const; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
298 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
299 bool previous_token_is_keyword (void) const; |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
300 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
301 bool previous_token_may_be_command (void) const; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
302 |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
303 void maybe_mark_previous_token_as_variable (void); |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
304 |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
305 void mark_as_variable (const std::string& nm); |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
306 void mark_as_variables (const std::list<std::string>& lst); |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
307 |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
308 // true means that we have encountered eof on the input stream. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
309 bool end_of_input; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
310 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
311 // true means we are at the beginning of a statement, where a |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
312 // command name is possible. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
313 bool at_beginning_of_statement; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
314 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
315 // true means we are parsing an anonymous function argument list. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
316 bool looking_at_anon_fcn_args; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
317 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
318 // true means we're parsing the return list for a function. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
319 bool looking_at_return_list; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
320 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
321 // true means we're parsing the parameter list for a function. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
322 bool looking_at_parameter_list; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
323 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
324 // true means we're parsing a declaration list (global or |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
325 // persistent). |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
326 bool looking_at_decl_list; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
327 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
328 // true means we are looking at the initializer expression for a |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
329 // parameter list element. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
330 bool looking_at_initializer_expression; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
331 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
332 // true means we're parsing a matrix or the left hand side of |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
333 // multi-value assignment statement. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
334 bool looking_at_matrix_or_assign_lhs; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
335 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
336 // object index not possible until we've seen something. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
337 bool looking_for_object_index; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
338 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
339 // true means we're looking at an indirect reference to a |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
340 // structure element. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
341 bool looking_at_indirect_ref; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
342 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
343 // true means we are parsing a class method in function or classdef file. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
344 bool parsing_class_method; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
345 |
16211
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
346 // true means we are parsing a classdef file |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
347 bool parsing_classdef; |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
348 |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
349 // true means we are parsing a class method declaration line in a |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
350 // classdef file and can accept a property get or set method name. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
351 // for example, "get.propertyname" is recognized as a function name. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
352 bool maybe_classdef_get_set_method; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
353 |
16211
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
354 // TRUE means we are parsing a classdef get.method. |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
355 bool parsing_classdef_get_method; |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
356 |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
357 // TRUE means we are parsing a classdef set.method. |
3449bf257514
maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents:
16205
diff
changeset
|
358 bool parsing_classdef_set_method; |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
359 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
360 // return transpose or start a string? |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
361 bool quote_is_transpose; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
362 |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
363 // TRUE means treat the current file as a script even if the first |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
364 // token is "function" or "classdef". |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
365 bool force_script; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
366 |
16199
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
367 // TRUE means we're parsing a function file. |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
368 bool reading_fcn_file; |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
369 |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
370 // TRUE means we're parsing a script file. |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
371 bool reading_script_file; |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
372 |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
373 // TRUE means we're parsing a classdef file. |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
374 bool reading_classdef_file; |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
375 |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
376 // the current input line number. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
377 int input_line_number; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
378 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
379 // the column of the current token. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
380 int current_input_column; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
381 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
382 // square bracket level count. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
383 int bracketflag; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
384 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
385 // curly brace level count. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
386 int braceflag; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
387 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
388 // true means we're in the middle of defining a loop. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
389 int looping; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
390 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
391 // nonzero means we're in the middle of defining a function. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
392 int defining_func; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
393 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
394 // nonzero means we are parsing a function handle. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
395 int looking_at_function_handle; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
396 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
397 // nestng level for blcok comments. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
398 int block_comment_nesting_level; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
399 |
18223
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
17796
diff
changeset
|
400 // Parenthesis count for command argument parsing. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
17796
diff
changeset
|
401 int command_arg_paren_count; |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
17796
diff
changeset
|
402 |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
403 // Count of tokens recognized by this lexer since initialized or |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
404 // since the last reset. |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
405 size_t token_count; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
406 |
16207
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
407 // The current line of input. |
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
408 std::string current_input_line; |
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
409 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
410 // The current comment text. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
411 std::string comment_text; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
412 |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
413 // The current help text. |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
414 std::string help_text; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
415 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
416 // The current character string text. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
417 std::string string_text; |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
418 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
419 // The position of the beginning of the current character string. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
420 int string_line; |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
421 int string_column; |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
422 |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
423 // Simple name of function file we are reading. |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
424 std::string fcn_file_name; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
425 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
426 // Full name of file we are reading. |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
427 std::string fcn_file_full_name; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
428 |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
429 // if the front of the list is true, the closest paren, brace, or |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
430 // bracket nesting is an index for an object. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
431 std::list<bool> looking_at_object_index; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
432 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
433 // if the top of the stack is true, then we've already seen the name |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
434 // of the current function. should only matter if |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
435 // current_function_level > 0 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
436 std::stack<bool> parsed_function_name; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
437 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
438 // set of identifiers that might be local variable names. |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
439 std::set<std::string> pending_local_variables; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
440 |
16320
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
441 // Track current symbol table scope and context. |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
442 symbol_table_context symtab_context; |
09f0cb9cac7d
don't modify symbol table scope in the parser
John W. Eaton <jwe@octave.org>
parents:
16294
diff
changeset
|
443 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
444 // is the closest nesting level a square bracket, squiggly brace, |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
445 // a paren, or an anonymous function body? |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
446 bbp_nesting_level nesting_level; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
447 |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
448 // Tokens generated by the lexer. |
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
449 token_cache tokens; |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
450 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
451 private: |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
452 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
453 // No copying! |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
454 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
455 lexical_feedback (const lexical_feedback&); |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
456 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
457 lexical_feedback& operator = (const lexical_feedback&); |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
458 }; |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
459 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
460 // octave_base_lexer inherits from lexical_feedback because we will |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
461 // eventually have several different constructors and it is easier to |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
462 // intialize if everything is grouped in a parent class rather than |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
463 // listing all the members in the octave_base_lexer class. |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
464 |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
465 class |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
466 octave_base_lexer : public lexical_feedback |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
467 { |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16185
diff
changeset
|
468 public: |
16104
c8974e28da59
move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16103
diff
changeset
|
469 |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
470 // Handle buffering of input for lexer. |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
471 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
472 class input_buffer |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
473 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
474 public: |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
475 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
476 input_buffer (void) |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
477 : buffer (), pos (0), chars_left (0), eof (false) |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
478 { } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
479 |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
480 void fill (const std::string& input, bool eof_arg); |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
481 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
482 // Copy at most max_size characters to buf. |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
483 int copy_chunk (char *buf, size_t max_size); |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
484 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
485 bool empty (void) const { return chars_left == 0; } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
486 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
487 bool at_eof (void) const { return eof; } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
488 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
489 private: |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
490 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
491 std::string buffer; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
492 const char *pos; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
493 size_t chars_left; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
494 bool eof; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
495 }; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
496 |
17693
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
497 // Collect comment text. |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
498 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
499 class |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
500 comment_buffer |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
501 { |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
502 public: |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
503 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
504 comment_buffer (void) : comment_list (0) { } |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
505 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
506 ~comment_buffer (void) { delete comment_list; } |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
507 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
508 void append (const std::string& s, octave_comment_elt::comment_type t) |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
509 { |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
510 if (! comment_list) |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
511 comment_list = new octave_comment_list (); |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
512 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
513 comment_list->append (s, t); |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
514 } |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
515 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
516 // Caller is expected to delete the returned value. |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
517 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
518 octave_comment_list *get_comment (void) |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
519 { |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
520 octave_comment_list *retval = comment_list; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
521 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
522 comment_list = 0; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
523 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
524 return retval; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
525 } |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
526 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
527 void reset (void) |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
528 { |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
529 delete comment_list; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
530 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
531 comment_list = 0; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
532 } |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
533 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
534 private: |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
535 |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
536 octave_comment_list *comment_list; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
537 }; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
538 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
539 octave_base_lexer (void) |
17693
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
540 : lexical_feedback (), scanner (0), input_buf (), comment_buf () |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
541 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
542 init (); |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
543 } |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
544 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
545 virtual ~octave_base_lexer (void); |
1826 | 546 |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16139
diff
changeset
|
547 void init (void); |
1826 | 548 |
16294
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
549 virtual bool is_push_lexer (void) const { return false; } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
550 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
551 virtual void reset (void); |
16122
6884401b2fbb
move reset_parser lexer helper function to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
552 |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
553 void prep_for_file (void); |
16124
3be725cd195b
move more lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
554 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
555 void begin_string (int state); |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
556 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
557 virtual int fill_flex_buffer (char *buf, unsigned int max_size) = 0; |
16120
4b68eb9b98b0
move octave_read lexer helper function to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
558 |
16294
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
559 bool at_end_of_buffer (void) const { return input_buf.empty (); } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
560 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
561 bool at_end_of_file (void) const { return input_buf.at_eof (); } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
562 |
16164
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
563 int handle_end_of_input (void); |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
564 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
565 char *flex_yytext (void); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
566 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
567 int flex_yyleng (void); |
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
568 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
569 int text_yyinput (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
570 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
571 void xunput (char c, char *buf); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
572 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
573 void xunput (char c); |
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
574 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
575 bool looking_at_space (void); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
576 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
577 bool inside_any_object_index (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
578 |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
579 bool is_variable (const std::string& name); |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
580 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
581 int is_keyword_token (const std::string& s); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
582 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
583 bool whitespace_is_significant (void); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
584 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
585 void handle_number (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
586 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
587 void handle_continuation (void); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
588 |
16337
6bfd8dbd7d3c
don't swallow statements that follow comment lines (bug #38549)
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
589 void finish_comment (octave_comment_elt::comment_type typ); |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
590 |
17693
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
591 octave_comment_list *get_comment (void) { return comment_buf.get_comment (); } |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
592 |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
593 int handle_close_bracket (int bracket_type); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
594 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
595 bool looks_like_command_arg (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
596 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
597 int handle_superclass_identifier (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
598 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
599 int handle_meta_identifier (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
600 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
601 int handle_identifier (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
602 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
603 void maybe_warn_separator_insert (char sep); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
604 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
605 void gripe_single_quote_string (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
606 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
607 void gripe_matlab_incompatible (const std::string& msg); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
608 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
609 void maybe_gripe_matlab_incompatible_comment (char c); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
610 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
611 void gripe_matlab_incompatible_continuation (void); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
612 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
613 void gripe_matlab_incompatible_operator (const std::string& op); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
614 |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
615 void push_token (token *); |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
616 |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
617 token *current_token (void); |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
618 |
16118
f8e463523229
move more static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16115
diff
changeset
|
619 void display_token (int tok); |
f8e463523229
move more static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16115
diff
changeset
|
620 |
16129
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
621 void fatal_error (const char *msg); |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
622 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
623 void lexer_debug (const char *pattern); |
16118
f8e463523229
move more static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16115
diff
changeset
|
624 |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16139
diff
changeset
|
625 // Internal state of the flex-generated lexer. |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16139
diff
changeset
|
626 void *scanner; |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16139
diff
changeset
|
627 |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
628 // Object that reads and buffers input. |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
629 input_buffer input_buf; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
630 |
17693
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
631 // Object that collects comment text. |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
632 comment_buffer comment_buf; |
efbe746f8fa8
eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
633 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
634 virtual void increment_promptflag (void) = 0; |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
635 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
636 virtual void decrement_promptflag (void) = 0; |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
637 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
638 virtual int promptflag (void) const = 0; |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
639 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
640 virtual int promptflag (int) = 0; |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
641 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
642 virtual std::string input_source (void) const { return "unknown"; } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
643 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
644 virtual bool input_from_terminal (void) const { return false; } |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
645 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
646 virtual bool input_from_file (void) const { return false; } |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
647 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
648 virtual bool input_from_eval_string (void) const { return false; } |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
649 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
650 void push_start_state (int state); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
651 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
652 void pop_start_state (void); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
653 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
654 void clear_start_state (void); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
655 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
656 int start_state (void) const { return start_state_stack.top (); } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
657 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
658 void display_start_state (void) const; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
659 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
660 int handle_op (const char *pattern, int tok, bool bos = false); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
661 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
662 int handle_incompatible_op (const char *pattern, int tok, bool bos = false); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
663 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
664 bool maybe_unput_comma_before_unary_op (int tok); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
665 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
666 int handle_unary_op (int tok, bool bos = false); |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
667 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
668 int handle_incompatible_unary_op (int tok, bool bos = false); |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
669 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
670 int handle_assign_op (const char *pattern, int tok); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
671 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
672 int handle_incompatible_assign_op (const char *pattern, int tok); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
673 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
674 int handle_op_internal (int tok, bool bos, bool compat); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
675 |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
676 int handle_token (const std::string& name, int tok); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
677 |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
678 int handle_token (int tok, token *tok_val = 0); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
679 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
680 int count_token (int tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
681 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
682 int count_token_internal (int tok); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
683 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
684 int show_token (int tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
685 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
686 protected: |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
687 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
688 std::stack<int> start_state_stack; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
689 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16107
diff
changeset
|
690 // No copying! |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16107
diff
changeset
|
691 |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
692 octave_base_lexer (const octave_base_lexer&); |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
693 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
694 octave_base_lexer& operator = (const octave_base_lexer&); |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
695 }; |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
696 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
697 class |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
698 octave_lexer : public octave_base_lexer |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
699 { |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
700 public: |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
701 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
702 octave_lexer (void) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
703 : octave_base_lexer (), input_reader (this) |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
704 { } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
705 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
706 octave_lexer (FILE *file) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
707 : octave_base_lexer (), input_reader (file, this) |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
708 { } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
709 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
710 octave_lexer (const std::string& eval_string) |
17731
f79bf671a493
eliminate global LEXER variable
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
711 : octave_base_lexer (), input_reader (eval_string, this) |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
712 { } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
713 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
714 void reset (void) |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
715 { |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
716 input_reader.reset (); |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
717 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
718 octave_base_lexer::reset (); |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
719 } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
720 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
721 void increment_promptflag (void) { input_reader.increment_promptflag (); } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
722 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
723 void decrement_promptflag (void) { input_reader.decrement_promptflag (); } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
724 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
725 int promptflag (void) const { return input_reader.promptflag (); } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
726 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
727 int promptflag (int n) { return input_reader.promptflag (n); } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
728 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
729 std::string input_source (void) const |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
730 { |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
731 return input_reader.input_source (); |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
732 } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
733 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
734 bool input_from_terminal (void) const |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
735 { |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
736 return input_reader.input_from_terminal (); |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
737 } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
738 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
739 bool input_from_file (void) const |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
740 { |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
741 return input_reader.input_from_file (); |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
742 } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
743 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
744 bool input_from_eval_string (void) const |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
745 { |
17733
8ad59bef27b5
use more direct method for checking input source for lexer
John W. Eaton <jwe@octave.org>
parents:
17731
diff
changeset
|
746 return input_reader.input_from_eval_string (); |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
747 } |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
748 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
749 int fill_flex_buffer (char *buf, unsigned int max_size); |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
750 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
751 octave_input_reader input_reader; |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
752 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
753 protected: |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
754 |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
755 // No copying! |
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
756 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
757 octave_lexer (const octave_lexer&); |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16107
diff
changeset
|
758 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
759 octave_lexer& operator = (const octave_lexer&); |
1826 | 760 }; |
761 | |
16294
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
762 class |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
763 octave_push_lexer : public octave_base_lexer |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
764 { |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
765 public: |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
766 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
767 octave_push_lexer (const std::string& input = std::string (), |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
768 bool eof = false) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
769 : octave_base_lexer (), pflag (1) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
770 { |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
771 append_input (input, eof); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
772 } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
773 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
774 bool is_push_lexer (void) const { return true; } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
775 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
776 void reset (void) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
777 { |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
778 promptflag (1); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
779 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
780 octave_base_lexer::reset (); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
781 } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
782 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
783 void append_input (const std::string& input, bool eof) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
784 { |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
785 input_buf.fill (input, eof); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
786 } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
787 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
788 void increment_promptflag (void) { pflag++; } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
789 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
790 void decrement_promptflag (void) { pflag--; } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
791 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
792 int promptflag (void) const { return pflag; } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
793 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
794 int promptflag (int n) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
795 { |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
796 int retval = pflag; |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
797 pflag = n; |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
798 return retval; |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
799 } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
800 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
801 std::string input_source (void) const { return "push buffer"; } |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
802 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
803 int fill_flex_buffer (char *buf, unsigned int max_size); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
804 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
805 protected: |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
806 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
807 int pflag; |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
808 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
809 // No copying! |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
810 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
811 octave_push_lexer (const octave_push_lexer&); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
812 |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
813 octave_push_lexer& operator = (const octave_push_lexer&); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
814 }; |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
815 |
1 | 816 #endif |