Mercurial > hg > octave-nkf
annotate libinterp/parse-tree/lex.ll @ 16255:12bf6a3f8c45
store more info in token value class
* token.h, token.cc: Store token ID and trailing space info
* lex.h, lex.ll (lexical_feedback::token_cache): Handle storing and
retrieving extra info in the lexer.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 11 Mar 2013 14:08:50 -0400 |
parents | a89cf57ba3a5 |
children | b28062b977fd db7f07b22b9b |
rev | line source |
---|---|
1994 | 1 /* |
1 | 2 |
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
14074
diff
changeset
|
3 Copyright (C) 1993-2012 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 | |
16150
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
23 /* |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
24 We are using the pure parser interface and the reentrant lexer |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
25 interface but the Octave parser and lexer are NOT properly |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
26 reentrant because both still use many global variables. It should be |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
27 safe to create a parser object and call it while anotehr parser |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
28 object is active (to parse a callback function while the main |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
29 interactive parser is waiting for input, for example) if you take |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
30 care to properly save and restore (typically with an unwind_protect |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
31 object) relevant global values before and after the nested call. |
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
32 */ |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
33 |
4753 | 34 %option prefix = "octave_" |
16146 | 35 %option noyywrap |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
36 %option reentrant |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
37 %option bison-bridge |
4753 | 38 |
10019
7ad32bf759c3
lex.cc: Use %top block to include config.h
John W. Eaton <jwe@octave.org>
parents:
9794
diff
changeset
|
39 %top { |
7ad32bf759c3
lex.cc: Use %top block to include config.h
John W. Eaton <jwe@octave.org>
parents:
9794
diff
changeset
|
40 #ifdef HAVE_CONFIG_H |
7ad32bf759c3
lex.cc: Use %top block to include config.h
John W. Eaton <jwe@octave.org>
parents:
9794
diff
changeset
|
41 #include <config.h> |
7ad32bf759c3
lex.cc: Use %top block to include config.h
John W. Eaton <jwe@octave.org>
parents:
9794
diff
changeset
|
42 #endif |
10411 | 43 |
10019
7ad32bf759c3
lex.cc: Use %top block to include config.h
John W. Eaton <jwe@octave.org>
parents:
9794
diff
changeset
|
44 } |
7ad32bf759c3
lex.cc: Use %top block to include config.h
John W. Eaton <jwe@octave.org>
parents:
9794
diff
changeset
|
45 |
4208 | 46 %s COMMAND_START |
47 %s MATRIX_START | |
4240 | 48 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
49 %x INPUT_FILE_START |
1 | 50 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
51 %x BLOCK_COMMENT_START |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
52 %x LINE_COMMENT_START |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
53 |
1 | 54 %{ |
240 | 55 |
1341 | 56 #include <cctype> |
57 #include <cstring> | |
58 | |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
59 #include <iostream> |
8001
ff9e7873f8ea
improve handling of command-style names in matrix_or_assign_lhs context
John W. Eaton <jwe@octave.org>
parents:
7898
diff
changeset
|
60 #include <set> |
5765 | 61 #include <sstream> |
1823 | 62 #include <string> |
4214 | 63 #include <stack> |
1823 | 64 |
4093 | 65 #include <sys/types.h> |
66 #include <unistd.h> | |
67 | |
2926 | 68 #include "cmd-edit.h" |
4153 | 69 #include "quit.h" |
4910 | 70 #include "lo-mappers.h" |
2926 | 71 |
16154
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
72 // These would be alphabetical, but oct-parse.h must be included before |
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
73 // oct-gperf.h and oct-parse.h must be included after token.h and the tree |
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
74 // class declarations. We can't include oct-parse.h in oct-gperf.h |
1497 | 75 // because it may not be protected to allow it to be included multiple |
76 // times. | |
77 | |
4264 | 78 #include "Cell.h" |
3665 | 79 #include "comment-list.h" |
2181 | 80 #include "defun.h" |
1355 | 81 #include "error.h" |
4910 | 82 #include "gripes.h" |
1351 | 83 #include "input.h" |
1355 | 84 #include "lex.h" |
2891 | 85 #include "ov.h" |
1355 | 86 #include "parse.h" |
14329
8d1ae996c122
also save and restore symbol table context in parser (bug #35448)
John W. Eaton <jwe@octave.org>
parents:
14294
diff
changeset
|
87 #include "parse-private.h" |
2987 | 88 #include "pt-all.h" |
2891 | 89 #include "symtab.h" |
90 #include "token.h" | |
91 #include "toplev.h" | |
1355 | 92 #include "utils.h" |
93 #include "variables.h" | |
9794
0d4613a736e9
convert build system to use automake and libtool
John W. Eaton <jwe@octave.org>
parents:
9476
diff
changeset
|
94 #include <oct-parse.h> |
2492 | 95 #include <oct-gperf.h> |
1 | 96 |
10426
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
97 #if defined (GNULIB_NAMESPACE) |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
98 // Calls to the following functions appear in the generated output from |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
99 // flex without the namespace tag. Redefine them so we will use them |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
100 // via the gnulib namespace. |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
101 #define fprintf GNULIB_NAMESPACE::fprintf |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
102 #define fwrite GNULIB_NAMESPACE::fwrite |
14161
f4b5a2f899d3
check in change accidentally omitted from previuos changeset
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
103 #define isatty GNULIB_NAMESPACE::isatty |
10426
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
104 #define malloc GNULIB_NAMESPACE::malloc |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
105 #define realloc GNULIB_NAMESPACE::realloc |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
106 #endif |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
107 |
2716 | 108 #if ! (defined (FLEX_SCANNER) \ |
109 && defined (YY_FLEX_MAJOR_VERSION) && YY_FLEX_MAJOR_VERSION >= 2 \ | |
110 && defined (YY_FLEX_MINOR_VERSION) && YY_FLEX_MINOR_VERSION >= 5) | |
111 #error lex.l requires flex version 2.5.4 or later | |
112 #endif | |
113 | |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
114 #define YY_EXTRA_TYPE octave_lexer * |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
115 #define curr_lexer yyextra |
4753 | 116 |
117 // Arrange to get input via readline. | |
118 | |
119 #ifdef YY_INPUT | |
120 #undef YY_INPUT | |
121 #endif | |
122 #define YY_INPUT(buf, result, max_size) \ | |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
123 result = curr_lexer->read (buf, max_size) |
4753 | 124 |
125 // Try to avoid crashing out completely on fatal scanner errors. | |
126 | |
127 #ifdef YY_FATAL_ERROR | |
128 #undef YY_FATAL_ERROR | |
129 #endif | |
130 #define YY_FATAL_ERROR(msg) \ | |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
131 (yyget_extra (yyscanner))->fatal_error (msg) |
4753 | 132 |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
133 static bool Vdisplay_tokens = false; |
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
134 |
4910 | 135 static unsigned int Vtoken_count = 0; |
136 | |
8535 | 137 // Internal variable for lexer debugging state. |
138 static bool lexer_debug_flag = false; | |
139 | |
146 | 140 // Forward declarations for functions defined at the bottom of this |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
141 // file that are needed inside the lexer actions. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
142 |
3523 | 143 static std::string strip_trailing_whitespace (char *s); |
1 | 144 |
145 %} | |
146 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
147 D [0-9] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
148 S [ \t] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
149 NL ((\n)|(\r)|(\r\n)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
150 SNL ({S}|{NL}) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
151 EL (\.\.\.) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
152 BS (\\) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
153 CONT ({EL}|{BS}) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
154 Im [iIjJ] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
155 CCHAR [#%] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
156 COMMENT ({CCHAR}.*{NL}) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
157 SNLCMT ({SNL}|{COMMENT}) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
158 IDENT ([_$a-zA-Z][_$a-zA-Z0-9]*) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
159 EXPON ([DdEe][+-]?{D}+) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
160 NUMBER (({D}+\.?{D}*{EXPON}?)|(\.{D}+{EXPON}?)|(0[xX][0-9a-fA-F]+)) |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
161 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
162 ANY_INCLUDING_NL (.|{NL}) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
163 |
1 | 164 %% |
165 | |
9474
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
166 %{ |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
167 // Make script and function files start with a bogus token. This makes |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
168 // the parser go down a special path. |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
169 %} |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
170 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
171 <INPUT_FILE_START>{ANY_INCLUDING_NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
172 curr_lexer->lexer_debug ("<INPUT_FILE_START>{ANY_INCLUDING_NL}"); |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
173 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
174 curr_lexer->xunput (yytext[0]); |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
175 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
176 // May be reset later if we see "function" or "classdef" appears |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
177 // as the first token. |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
178 curr_lexer->reading_script_file = true; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
179 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
180 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
181 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
182 return curr_lexer->show_token (INPUT_FILE); |
4238 | 183 } |
184 | |
968 | 185 %{ |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
186 // Help and other command-style functions. |
968 | 187 %} |
188 | |
4208 | 189 <COMMAND_START>{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
190 curr_lexer->lexer_debug ("<COMMAND_START>{NL}"); |
8535 | 191 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
192 curr_lexer->input_line_number++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
193 curr_lexer->current_input_column = 1; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
194 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
195 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
196 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
197 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
198 curr_lexer->at_beginning_of_statement = true; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
199 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
200 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
201 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
202 return curr_lexer->count_token ('\n'); |
967 | 203 } |
1 | 204 |
4208 | 205 <COMMAND_START>[\;\,] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
206 curr_lexer->lexer_debug ("<COMMAND_START>[\\;\\,]"); |
8535 | 207 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
208 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
209 curr_lexer->at_beginning_of_statement = true; |
5102 | 210 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
211 curr_lexer->pop_start_state (); |
5102 | 212 |
213 if (strcmp (yytext, ",") == 0) | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
214 return curr_lexer->handle_token (','); |
967 | 215 else |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
216 return curr_lexer->handle_token (';'); |
967 | 217 } |
1 | 218 |
4208 | 219 <COMMAND_START>[\"\'] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
220 curr_lexer->lexer_debug ("<COMMAND_START>[\\\"\\']"); |
8535 | 221 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
222 curr_lexer->at_beginning_of_statement = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
223 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
224 curr_lexer->current_input_column++; |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
225 int tok = curr_lexer->handle_string (yytext[0]); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
226 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
227 return curr_lexer->count_token (tok); |
975 | 228 } |
229 | |
4923 | 230 <COMMAND_START>[^#% \t\r\n\;\,\"\'][^ \t\r\n\;\,]*{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
231 curr_lexer->lexer_debug ("<COMMAND_START>[^#% \\t\\r\\n\\;\\,\\\"\\'][^ \\t\\r\\n\\;\\,]*{S}*"); |
8535 | 232 |
3523 | 233 std::string tok = strip_trailing_whitespace (yytext); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
234 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
235 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
236 curr_lexer->at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
237 |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
238 return curr_lexer->handle_token (tok, SQ_STRING); |
967 | 239 } |
1 | 240 |
968 | 241 %{ |
1 | 242 // For this and the next two rules, we're looking at ']', and we |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
243 // need to know if the next token is '=' or '=='. |
1 | 244 // |
245 // It would have been so much easier if the delimiters were simply | |
246 // different for the expression on the left hand side of the equals | |
247 // operator. | |
971 | 248 // |
249 // It's also a pain in the ass to decide whether to insert a comma | |
250 // after seeing a ']' character... | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
251 |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
252 // FIXME -- we need to handle block comments here. |
968 | 253 %} |
254 | |
4208 | 255 <MATRIX_START>{SNLCMT}*\]{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
256 curr_lexer->lexer_debug ("<MATRIX_START>{SNLCMT}*\\]{S}*"); |
8535 | 257 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
258 curr_lexer->scan_for_comments (yytext); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
259 curr_lexer->fixup_column_count (yytext); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
260 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
261 curr_lexer->looking_at_object_index.pop_front (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
262 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
263 curr_lexer->looking_for_object_index = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
264 curr_lexer->at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
265 |
1001 | 266 int c = yytext[yyleng-1]; |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
267 bool cont_is_spc = (curr_lexer->eat_continuation () != octave_lexer::NO_WHITESPACE); |
4608 | 268 bool spc_gobbled = (cont_is_spc || c == ' ' || c == '\t'); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
269 int tok_to_return = curr_lexer->handle_close_bracket (spc_gobbled, ']'); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
270 |
5345 | 271 if (spc_gobbled) |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
272 curr_lexer->xunput (' '); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
273 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
274 return curr_lexer->count_token (tok_to_return); |
4608 | 275 } |
276 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
277 %{ |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
278 // FIXME -- we need to handle block comments here. |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
279 %} |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
280 |
4608 | 281 <MATRIX_START>{SNLCMT}*\}{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
282 curr_lexer->lexer_debug ("<MATRIX_START>{SNLCMT}*\\}{S}*"); |
8535 | 283 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
284 curr_lexer->scan_for_comments (yytext); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
285 curr_lexer->fixup_column_count (yytext); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
286 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
287 curr_lexer->looking_at_object_index.pop_front (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
288 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
289 curr_lexer->looking_for_object_index = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
290 curr_lexer->at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
291 |
4608 | 292 int c = yytext[yyleng-1]; |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
293 bool cont_is_spc = (curr_lexer->eat_continuation () != octave_lexer::NO_WHITESPACE); |
4608 | 294 bool spc_gobbled = (cont_is_spc || c == ' ' || c == '\t'); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
295 int tok_to_return = curr_lexer->handle_close_bracket (spc_gobbled, '}'); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
296 |
5345 | 297 if (spc_gobbled) |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
298 curr_lexer->xunput (' '); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
299 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
300 return curr_lexer->count_token (tok_to_return); |
967 | 301 } |
1 | 302 |
968 | 303 %{ |
1088 | 304 // Commas are element separators in matrix constants. If we don't |
305 // check for continuations here we can end up inserting too many | |
306 // commas. | |
968 | 307 %} |
308 | |
4208 | 309 <MATRIX_START>{S}*\,{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
310 curr_lexer->lexer_debug ("<MATRIX_START>{S}*\\,{S}*"); |
8535 | 311 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
312 curr_lexer->current_input_column += yyleng; |
3388 | 313 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
314 int tmp = curr_lexer->eat_continuation (); |
3388 | 315 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
316 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
317 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
318 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
319 curr_lexer->at_beginning_of_statement = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
320 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
321 if (! curr_lexer->looking_at_object_index.front ()) |
3388 | 322 { |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
323 if ((tmp & octave_lexer::NEWLINE) == octave_lexer::NEWLINE) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
324 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
325 curr_lexer->maybe_warn_separator_insert (';'); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
326 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
327 curr_lexer->xunput (';'); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
328 } |
3388 | 329 } |
330 | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
331 return curr_lexer->count_token (','); |
967 | 332 } |
1 | 333 |
968 | 334 %{ |
335 // In some cases, spaces in matrix constants can turn into commas. | |
336 // If commas are required, spaces are not important in matrix | |
1088 | 337 // constants so we just eat them. If we don't check for continuations |
338 // here we can end up inserting too many commas. | |
968 | 339 %} |
430 | 340 |
4208 | 341 <MATRIX_START>{S}+ { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
342 curr_lexer->lexer_debug ("<MATRIX_START>{S}+"); |
8535 | 343 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
344 curr_lexer->current_input_column += yyleng; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
345 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
346 curr_lexer->at_beginning_of_statement = false; |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
347 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
348 int tmp = curr_lexer->eat_continuation (); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
349 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
350 if (! curr_lexer->looking_at_object_index.front ()) |
967 | 351 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
352 bool bin_op = curr_lexer->next_token_is_bin_op (true); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
353 bool postfix_un_op = curr_lexer->next_token_is_postfix_unary_op (true); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
354 bool sep_op = curr_lexer->next_token_is_sep_op (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
355 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
356 if (! (postfix_un_op || bin_op || sep_op) |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
357 && curr_lexer->nesting_level.is_bracket_or_brace () |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
358 && curr_lexer->convert_spaces_to_comma) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
359 { |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
360 if ((tmp & octave_lexer::NEWLINE) == octave_lexer::NEWLINE) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
361 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
362 curr_lexer->maybe_warn_separator_insert (';'); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
363 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
364 curr_lexer->xunput (';'); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
365 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
366 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
367 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
368 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
369 curr_lexer->looking_for_object_index = false; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
370 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
371 curr_lexer->maybe_warn_separator_insert (','); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
372 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
373 return curr_lexer->count_token (','); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
374 } |
967 | 375 } |
376 } | |
430 | 377 |
968 | 378 %{ |
1088 | 379 // Semicolons are handled as row seprators in matrix constants. If we |
380 // don't eat whitespace here we can end up inserting too many | |
381 // semicolons. | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
382 |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
383 // FIXME -- we need to handle block comments here. |
968 | 384 %} |
385 | |
4208 | 386 <MATRIX_START>{SNLCMT}*;{SNLCMT}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
387 curr_lexer->lexer_debug ("<MATRIX_START>{SNLCMT}*;{SNLCMT}*"); |
8535 | 388 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
389 curr_lexer->scan_for_comments (yytext); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
390 curr_lexer->fixup_column_count (yytext); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
391 curr_lexer->eat_whitespace (); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
392 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
393 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
394 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
395 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
396 curr_lexer->at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
397 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
398 return curr_lexer->count_token (';'); |
967 | 399 } |
400 | |
968 | 401 %{ |
1088 | 402 // In some cases, new lines can also become row separators. If we |
403 // don't eat whitespace here we can end up inserting too many | |
404 // semicolons. | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
405 |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
406 // FIXME -- we need to handle block comments here. |
985 | 407 %} |
408 | |
4208 | 409 <MATRIX_START>{S}*{COMMENT}{SNLCMT}* | |
410 <MATRIX_START>{S}*{NL}{SNLCMT}* { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
411 curr_lexer->lexer_debug ("<MATRIX_START>{S}*{COMMENT}{SNLCMT}*|<MATRIX_START>{S}*{NL}{SNLCMT}*"); |
8535 | 412 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
413 curr_lexer->scan_for_comments (yytext); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
414 curr_lexer->fixup_column_count (yytext); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
415 curr_lexer->eat_whitespace (); |
3388 | 416 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
417 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
418 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
419 curr_lexer->at_beginning_of_statement = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
420 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
421 if (curr_lexer->nesting_level.none ()) |
4476 | 422 return LEXICAL_ERROR; |
985 | 423 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
424 if (! curr_lexer->looking_at_object_index.front () |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
425 && curr_lexer->nesting_level.is_bracket_or_brace ()) |
3388 | 426 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
427 curr_lexer->maybe_warn_separator_insert (';'); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
428 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
429 return curr_lexer->count_token (';'); |
985 | 430 } |
431 } | |
432 | |
967 | 433 \[{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
434 curr_lexer->lexer_debug ("\\[{S}*"); |
8535 | 435 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
436 curr_lexer->nesting_level.bracket (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
437 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
438 curr_lexer->looking_at_object_index.push_front (false); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
439 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
440 curr_lexer->current_input_column += yyleng; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
441 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
442 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
443 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
444 curr_lexer->at_beginning_of_statement = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
445 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
446 if (curr_lexer->defining_func |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
447 && ! curr_lexer->parsed_function_name.top ()) |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
448 curr_lexer->looking_at_return_list = true; |
5615 | 449 else |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
450 curr_lexer->looking_at_matrix_or_assign_lhs = true; |
5615 | 451 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
452 curr_lexer->decrement_promptflag (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
453 curr_lexer->eat_whitespace (); |
975 | 454 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
455 curr_lexer->bracketflag++; |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
456 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
457 curr_lexer->push_start_state (MATRIX_START); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
458 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
459 return curr_lexer->count_token ('['); |
967 | 460 } |
1 | 461 |
968 | 462 \] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
463 curr_lexer->lexer_debug ("\\]"); |
8535 | 464 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
465 curr_lexer->nesting_level.remove (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
466 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
467 curr_lexer->looking_at_object_index.pop_front (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
468 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
469 curr_lexer->looking_for_object_index = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
470 curr_lexer->at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
471 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
472 return curr_lexer->handle_token (']'); |
968 | 473 } |
474 | |
475 %{ | |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
476 // Gobble comments. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
477 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
478 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
479 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
480 // Start of a block comment. If the comment marker appears immediately |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
481 // after a block of full-line comments, finish the full line comment |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
482 // block. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
483 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
484 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
485 ^{S}*{CCHAR}\{{S}*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
486 curr_lexer->lexer_debug ("^{S}*{CCHAR}\{{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
487 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
488 yyless (0); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
489 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
490 if (curr_lexer->start_state () == LINE_COMMENT_START) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
491 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
492 if (! curr_lexer->comment_text.empty ()) |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
493 curr_lexer->finish_comment (octave_comment_elt::full_line); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
494 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
495 curr_lexer->pop_start_state (); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
496 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
497 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
498 curr_lexer->push_start_state (BLOCK_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
499 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
500 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
501 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
502 <BLOCK_COMMENT_START>^{S}*{CCHAR}\{{S}*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
503 curr_lexer->lexer_debug ("<BLOCK_COMMENT_START>^{S}*{CCHAR}\{{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
504 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
505 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
506 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
507 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
508 if (curr_lexer->block_comment_nesting_level) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
509 curr_lexer->comment_text = "\n"; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
510 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
511 curr_lexer->block_comment_nesting_level++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
512 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
513 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
514 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
515 // End of a block comment. If this block comment is nested inside |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
516 // another, wait for the outermost block comment block to be closed |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
517 // before storing the comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
518 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
519 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
520 <BLOCK_COMMENT_START>^{S}*{CCHAR}\}{S}*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
521 curr_lexer->lexer_debug ("<BLOCK_COMMENT_START>^{S}*{CCHAR}\\}{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
522 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
523 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
524 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
525 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
526 if (curr_lexer->block_comment_nesting_level > 1) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
527 curr_lexer->comment_text = "\n"; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
528 else |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
529 curr_lexer->finish_comment (octave_comment_elt::block); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
530 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
531 curr_lexer->block_comment_nesting_level--; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
532 curr_lexer->pop_start_state (); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
533 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
534 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
535 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
536 // Body of a block comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
537 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
538 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
539 <BLOCK_COMMENT_START>.*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
540 curr_lexer->lexer_debug ("<BLOCK_COMMENT_START>.*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
541 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
542 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
543 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
544 curr_lexer->comment_text += yytext; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
545 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
546 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
547 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
548 // Full-line or end-of-line comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
549 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
550 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
551 {S}*{CCHAR}.*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
552 curr_lexer->lexer_debug ("{S}*{CCHAR}.*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
553 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
554 curr_lexer->push_start_state (LINE_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
555 yyless (0); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
556 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
557 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
558 <LINE_COMMENT_START>{S}*{CCHAR}.*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
559 curr_lexer->lexer_debug ("<LINE_COMMENT_START>{S}*{CCHAR}.*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
560 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
561 bool full_line_comment = curr_lexer->current_input_column == 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
562 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
563 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
564 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
565 bool have_space = false; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
566 size_t len = yyleng; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
567 size_t i = 0; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
568 while (i < len) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
569 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
570 char c = yytext[i]; |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
571 if (c == ' ' || c == '\t') |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
572 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
573 have_space = true; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
574 i++; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
575 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
576 else |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
577 break; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
578 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
579 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
580 while (i < len) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
581 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
582 char c = yytext[i]; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
583 if (c == '#' || c == '%') |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
584 i++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
585 else |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
586 break; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
587 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
588 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
589 curr_lexer->comment_text += &yytext[i]; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
590 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
591 if (! full_line_comment) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
592 { |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
593 if (have_space) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
594 curr_lexer->mark_previous_token_trailing_space (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
595 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
596 curr_lexer->finish_comment (octave_comment_elt::end_of_line); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
597 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
598 curr_lexer->pop_start_state (); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
599 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
600 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
601 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
602 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
603 // End of a block of full-line comments. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
604 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
605 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
606 <LINE_COMMENT_START>{ANY_INCLUDING_NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
607 curr_lexer->lexer_debug ("<LINE_COMMENT_START>{ANY_INCLUDING_NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
608 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
609 curr_lexer->xunput (yytext[0]); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
610 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
611 curr_lexer->finish_comment (octave_comment_elt::full_line); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
612 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
613 curr_lexer->pop_start_state (); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
614 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
615 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
616 %{ |
968 | 617 // Imaginary numbers. |
618 %} | |
619 | |
620 {NUMBER}{Im} { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
621 curr_lexer->lexer_debug ("{NUMBER}{Im}"); |
8535 | 622 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
623 curr_lexer->handle_number (); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
624 return curr_lexer->count_token (IMAG_NUM); |
968 | 625 } |
626 | |
627 %{ | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
628 // Real numbers. Don't grab the '.' part of a dot operator as part of |
968 | 629 // the constant. |
630 %} | |
631 | |
8535 | 632 {D}+/\.[\*/\\^\'] | |
968 | 633 {NUMBER} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
634 curr_lexer->lexer_debug ("{D}+/\\.[\\*/\\^\\']|{NUMBER}"); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
635 curr_lexer->handle_number (); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
636 return curr_lexer->count_token (NUM); |
968 | 637 } |
638 | |
639 %{ | |
640 // Eat whitespace. Whitespace inside matrix constants is handled by | |
4208 | 641 // the <MATRIX_START> start state code above. |
968 | 642 %} |
643 | |
967 | 644 {S}* { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
645 curr_lexer->current_input_column += yyleng; |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
646 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
647 curr_lexer->mark_previous_token_trailing_space (); |
967 | 648 } |
649 | |
968 | 650 %{ |
651 // Continuation lines. Allow comments after continuations. | |
652 %} | |
653 | |
967 | 654 {CONT}{S}*{NL} | |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
655 {CONT}{S}*{CCHAR}.*{NL} { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
656 curr_lexer->lexer_debug ("{CONT}{S}*{NL}|{CONT}{S}*{CCHAR}.*{NL}"); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
657 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
658 curr_lexer->handle_continuation (); |
967 | 659 } |
1 | 660 |
968 | 661 %{ |
662 // End of file. | |
663 %} | |
664 | |
967 | 665 <<EOF>> { |
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
|
666 return curr_lexer->handle_end_of_input (); |
967 | 667 } |
1 | 668 |
968 | 669 %{ |
970 | 670 // Identifiers. Truncate the token at the first space or tab but |
671 // don't write directly on yytext. | |
968 | 672 %} |
673 | |
967 | 674 {IDENT}{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
675 curr_lexer->lexer_debug ("{IDENT}{S}*"); |
8535 | 676 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
677 int id_tok = curr_lexer->handle_identifier (); |
4238 | 678 |
679 if (id_tok >= 0) | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
680 return curr_lexer->count_token (id_tok); |
967 | 681 } |
1 | 682 |
968 | 683 %{ |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
684 // Superclass method identifiers. |
9476 | 685 %} |
686 | |
687 {IDENT}@{IDENT}{S}* | | |
688 {IDENT}@{IDENT}.{IDENT}{S}* { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
689 curr_lexer->lexer_debug ("{IDENT}@{IDENT}{S}*|{IDENT}@{IDENT}.{IDENT}{S}*"); |
9476 | 690 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
691 int id_tok = curr_lexer->handle_superclass_identifier (); |
9476 | 692 |
693 if (id_tok >= 0) | |
694 { | |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
695 curr_lexer->looking_for_object_index = true; |
9476 | 696 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
697 return curr_lexer->count_token (SUPERCLASSREF); |
9476 | 698 } |
699 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
700 |
9476 | 701 %{ |
702 // Metaclass query | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
703 %} |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
704 |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
705 \?{IDENT}{S}* | |
14638
5b0872b5b234
fix missing backslash quoting in lexer rules
John W. Eaton <jwe@octave.org>
parents:
14510
diff
changeset
|
706 \?{IDENT}\.{IDENT}{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
707 curr_lexer->lexer_debug ("\\?{IDENT}{S}*|\\?{IDENT}\\.{IDENT}{S}*"); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
708 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
709 int id_tok = curr_lexer->handle_meta_identifier (); |
9476 | 710 |
711 if (id_tok >= 0) | |
712 { | |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
713 curr_lexer->looking_for_object_index = true; |
9476 | 714 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
715 return curr_lexer->count_token (METAQUERY); |
9476 | 716 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
717 } |
9476 | 718 |
719 %{ | |
720 // Function handles and superclass references | |
4342 | 721 %} |
722 | |
4930 | 723 "@" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
724 curr_lexer->lexer_debug ("@"); |
8535 | 725 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
726 curr_lexer->current_input_column++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
727 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
728 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
729 curr_lexer->convert_spaces_to_comma = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
730 curr_lexer->looking_at_function_handle++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
731 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
732 curr_lexer->at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
733 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
734 return curr_lexer->count_token ('@'); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
735 |
4342 | 736 } |
737 | |
738 %{ | |
968 | 739 // A new line character. New line characters inside matrix constants |
4208 | 740 // are handled by the <MATRIX_START> start state code above. If closest |
985 | 741 // nesting is inside parentheses, don't return a row separator. |
968 | 742 %} |
743 | |
967 | 744 {NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
745 curr_lexer->lexer_debug ("{NL}"); |
8535 | 746 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
747 curr_lexer->input_line_number++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
748 curr_lexer->current_input_column = 1; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
749 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
750 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
751 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
752 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
753 if (curr_lexer->nesting_level.none ()) |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
754 { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
755 curr_lexer->at_beginning_of_statement = true; |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
756 return curr_lexer->count_token ('\n'); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
757 } |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
758 else if (curr_lexer->nesting_level.is_paren ()) |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
759 { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
760 curr_lexer->at_beginning_of_statement = false; |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
761 curr_lexer->gripe_matlab_incompatible ("bare newline inside parentheses"); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
762 } |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
763 else if (curr_lexer->nesting_level.is_bracket_or_brace ()) |
985 | 764 return LEXICAL_ERROR; |
967 | 765 } |
1 | 766 |
968 | 767 %{ |
768 // Single quote can either be the beginning of a string or a transpose | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
769 // operator. |
968 | 770 %} |
771 | |
967 | 772 "'" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
773 curr_lexer->lexer_debug ("'"); |
8535 | 774 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
775 curr_lexer->current_input_column++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
776 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
777 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
778 if (curr_lexer->quote_is_transpose) |
967 | 779 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
780 curr_lexer->do_comma_insert_check (); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
781 return curr_lexer->count_token (QUOTE); |
967 | 782 } |
783 else | |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
784 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
785 int tok = curr_lexer->handle_string ('\''); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
786 return curr_lexer->count_token (tok); |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
787 } |
967 | 788 } |
1 | 789 |
968 | 790 %{ |
971 | 791 // Double quotes always begin strings. |
792 %} | |
793 | |
973 | 794 \" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
795 curr_lexer->lexer_debug ("\""); |
8535 | 796 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
797 curr_lexer->current_input_column++; |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
798 int tok = curr_lexer->handle_string ('"'); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
799 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
800 return curr_lexer->count_token (tok); |
973 | 801 } |
971 | 802 |
803 %{ | |
968 | 804 // Other operators. |
805 %} | |
806 | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
807 ":" { return curr_lexer->handle_op (":", ':'); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
808 ".+" { return curr_lexer->handle_incompatible_op (".+", EPLUS); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
809 ".-" { return curr_lexer->handle_incompatible_op (".-", EMINUS); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
810 ".*" { return curr_lexer->handle_op (".*", EMUL); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
811 "./" { return curr_lexer->handle_op ("./", EDIV); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
812 ".\\" { return curr_lexer->handle_op (".\\", ELEFTDIV); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
813 ".^" { return curr_lexer->handle_op (".^", EPOW); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
814 ".**" { return curr_lexer->handle_incompatible_op (".**", EPOW); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
815 "<=" { return curr_lexer->handle_op ("<=", EXPR_LE); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
816 "==" { return curr_lexer->handle_op ("==", EXPR_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
817 "~=" { return curr_lexer->handle_op ("~=", EXPR_NE); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
818 "!=" { return curr_lexer->handle_incompatible_op ("!=", EXPR_NE); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
819 ">=" { return curr_lexer->handle_op (">=", EXPR_GE); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
820 "&" { return curr_lexer->handle_op ("&", EXPR_AND); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
821 "|" { return curr_lexer->handle_op ("|", EXPR_OR); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
822 "<" { return curr_lexer->handle_op ("<", EXPR_LT); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
823 ">" { return curr_lexer->handle_op (">", EXPR_GT); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
824 "+" { return curr_lexer->handle_op ("+", '+'); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
825 "-" { return curr_lexer->handle_op ("-", '-'); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
826 "*" { return curr_lexer->handle_op ("*", '*'); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
827 "/" { return curr_lexer->handle_op ("/", '/'); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
828 "\\" { return curr_lexer->handle_op ("\\", LEFTDIV); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
829 "^" { return curr_lexer->handle_op ("^", POW); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
830 "**" { return curr_lexer->handle_incompatible_op ("**", POW); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
831 "=" { return curr_lexer->handle_op ("=", '=', true, false); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
832 "&&" { return curr_lexer->handle_op ("&&", EXPR_AND_AND); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
833 "||" { return curr_lexer->handle_op ("||", EXPR_OR_OR); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
834 "<<" { return curr_lexer->handle_incompatible_op ("<<", LSHIFT); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
835 ">>" { return curr_lexer->handle_incompatible_op (">>", RSHIFT); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
836 "~" { return curr_lexer->handle_op ("~", EXPR_NOT); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
837 "!" { return curr_lexer->handle_incompatible_op ("!", EXPR_NOT); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
838 ";" { return curr_lexer->handle_op (";", ';', true, true); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
839 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
840 "," { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
841 return curr_lexer->handle_op |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
842 (",", ',', true, ! curr_lexer->looking_at_object_index.front ()); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
843 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
844 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
845 ".'" { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
846 curr_lexer->do_comma_insert_check (); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
847 return curr_lexer->handle_op (".'", TRANSPOSE, true, false); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
848 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
849 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
850 "++" { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
851 curr_lexer->do_comma_insert_check (); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
852 return curr_lexer->handle_incompatible_op |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
853 ("++", PLUS_PLUS, true, false, true); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
854 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
855 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
856 "--" { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
857 ; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
858 curr_lexer->do_comma_insert_check (); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
859 return curr_lexer->handle_incompatible_op |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
860 ("--", MINUS_MINUS, true, false, true); |
967 | 861 } |
1 | 862 |
967 | 863 "(" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
864 curr_lexer->lexer_debug ("("); |
8535 | 865 |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
866 // If we are looking for an object index, then push TRUE for |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
867 // looking_at_object_index. Otherwise, just push whatever state |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
868 // is current (so that we can pop it off the stack when we find |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
869 // the matching close paren). |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
870 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
871 curr_lexer->looking_at_object_index.push_front |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
872 (curr_lexer->looking_for_object_index); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
873 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
874 curr_lexer->looking_at_indirect_ref = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
875 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
876 curr_lexer->at_beginning_of_statement = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
877 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
878 curr_lexer->nesting_level.paren (); |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
879 curr_lexer->decrement_promptflag (); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
880 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
881 return curr_lexer->handle_token ('('); |
967 | 882 } |
883 | |
884 ")" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
885 curr_lexer->lexer_debug (")"); |
8535 | 886 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
887 curr_lexer->nesting_level.remove (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
888 curr_lexer->current_input_column++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
889 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
890 curr_lexer->looking_at_object_index.pop_front (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
891 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
892 curr_lexer->quote_is_transpose = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
893 curr_lexer->convert_spaces_to_comma |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
894 = (curr_lexer->nesting_level.is_bracket_or_brace () |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
895 && ! curr_lexer->looking_at_anon_fcn_args); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
896 curr_lexer->looking_for_object_index = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
897 curr_lexer->at_beginning_of_statement = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
898 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
899 if (curr_lexer->looking_at_anon_fcn_args) |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
900 curr_lexer->looking_at_anon_fcn_args = false; |
13237
1bfca2bbea8b
fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents:
12801
diff
changeset
|
901 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
902 curr_lexer->do_comma_insert_check (); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
903 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
904 return curr_lexer->count_token (')'); |
967 | 905 } |
906 | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
907 "." { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
908 curr_lexer->lexer_debug ("."); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
909 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
910 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
911 curr_lexer->at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
912 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
913 return curr_lexer->handle_token ('.'); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
914 } |
8535 | 915 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
916 %{ |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
917 // op= operators. |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
918 %} |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
919 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
920 "+=" { return curr_lexer->handle_incompatible_op ("+=", ADD_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
921 "-=" { return curr_lexer->handle_incompatible_op ("-=", SUB_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
922 "*=" { return curr_lexer->handle_incompatible_op ("*=", MUL_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
923 "/=" { return curr_lexer->handle_incompatible_op ("/=", DIV_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
924 "\\=" { return curr_lexer->handle_incompatible_op ("\\=", LEFTDIV_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
925 ".+=" { return curr_lexer->handle_incompatible_op (".+=", ADD_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
926 ".-=" { return curr_lexer->handle_incompatible_op (".-=", SUB_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
927 ".*=" { return curr_lexer->handle_incompatible_op (".*=", EMUL_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
928 "./=" { return curr_lexer->handle_incompatible_op ("./=", EDIV_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
929 ".\\=" { return curr_lexer->handle_incompatible_op (".\\=", ELEFTDIV_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
930 "^=" { return curr_lexer->handle_incompatible_op ("^=", POW_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
931 "**=" { return curr_lexer->handle_incompatible_op ("^=", POW_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
932 ".^=" { return curr_lexer->handle_incompatible_op (".^=", EPOW_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
933 ".**=" { return curr_lexer->handle_incompatible_op (".^=", EPOW_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
934 "&=" { return curr_lexer->handle_incompatible_op ("&=", AND_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
935 "|=" { return curr_lexer->handle_incompatible_op ("|=", OR_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
936 "<<=" { return curr_lexer->handle_incompatible_op ("<<=", LSHIFT_EQ); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
937 ">>=" { return curr_lexer->handle_incompatible_op (">>=", RSHIFT_EQ); } |
2877 | 938 |
4608 | 939 \{{S}* { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
940 curr_lexer->lexer_debug ("\\{{S}*"); |
8535 | 941 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
942 curr_lexer->nesting_level.brace (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
943 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
944 curr_lexer->looking_at_object_index.push_front |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
945 (curr_lexer->looking_for_object_index); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
946 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
947 curr_lexer->current_input_column += yyleng; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
948 curr_lexer->quote_is_transpose = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
949 curr_lexer->convert_spaces_to_comma = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
950 curr_lexer->looking_for_object_index = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
951 curr_lexer->at_beginning_of_statement = false; |
4608 | 952 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
953 curr_lexer->decrement_promptflag (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
954 curr_lexer->eat_whitespace (); |
4608 | 955 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
956 curr_lexer->braceflag++; |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
957 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
958 curr_lexer->push_start_state (MATRIX_START); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
959 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
960 return curr_lexer->count_token ('{'); |
3351 | 961 } |
962 | |
963 "}" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
964 curr_lexer->lexer_debug ("}"); |
8535 | 965 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
966 curr_lexer->looking_at_object_index.pop_front (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
967 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
968 curr_lexer->looking_for_object_index = true; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
969 curr_lexer->at_beginning_of_statement = false; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
970 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
971 curr_lexer->nesting_level.remove (); |
3351 | 972 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
973 return curr_lexer->handle_token ('}'); |
3351 | 974 } |
975 | |
968 | 976 %{ |
2066 | 977 // Unrecognized input is a lexical error. |
968 | 978 %} |
1 | 979 |
2042 | 980 . { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
981 curr_lexer->lexer_debug ("."); |
8535 | 982 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
983 curr_lexer->xunput (yytext[0]); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
984 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
985 int c = curr_lexer->text_yyinput (); |
4248 | 986 |
987 if (c != EOF) | |
4240 | 988 { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
989 curr_lexer->current_input_column++; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
990 |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
991 error ("invalid character '%s' (ASCII %d) near line %d, column %d", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
992 undo_string_escape (static_cast<char> (c)), c, |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
993 curr_lexer->input_line_number, curr_lexer->current_input_column); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
994 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
995 return LEXICAL_ERROR; |
4240 | 996 } |
997 else | |
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
|
998 return curr_lexer->handle_end_of_input (); |
2066 | 999 } |
1 | 1000 |
1001 %% | |
1002 | |
8447
adab48231a03
make input_line_number work again
John W. Eaton <jwe@octave.org>
parents:
8312
diff
changeset
|
1003 static void |
8535 | 1004 display_character (char c) |
1005 { | |
1006 if (isgraph (c)) | |
1007 std::cerr << c; | |
1008 else | |
1009 switch (c) | |
1010 { | |
1011 case 0: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1012 std::cerr << "NUL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1013 break; |
8535 | 1014 |
1015 case 1: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1016 std::cerr << "SOH"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1017 break; |
8535 | 1018 |
1019 case 2: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1020 std::cerr << "STX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1021 break; |
8535 | 1022 |
1023 case 3: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1024 std::cerr << "ETX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1025 break; |
8535 | 1026 |
1027 case 4: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1028 std::cerr << "EOT"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1029 break; |
8535 | 1030 |
1031 case 5: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1032 std::cerr << "ENQ"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1033 break; |
8535 | 1034 |
1035 case 6: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1036 std::cerr << "ACK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1037 break; |
8535 | 1038 |
1039 case 7: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1040 std::cerr << "\\a"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1041 break; |
8535 | 1042 |
1043 case 8: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1044 std::cerr << "\\b"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1045 break; |
8535 | 1046 |
1047 case 9: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1048 std::cerr << "\\t"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1049 break; |
8535 | 1050 |
1051 case 10: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1052 std::cerr << "\\n"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1053 break; |
8535 | 1054 |
1055 case 11: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1056 std::cerr << "\\v"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1057 break; |
8535 | 1058 |
1059 case 12: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1060 std::cerr << "\\f"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1061 break; |
8535 | 1062 |
1063 case 13: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1064 std::cerr << "\\r"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1065 break; |
8535 | 1066 |
1067 case 14: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1068 std::cerr << "SO"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1069 break; |
8535 | 1070 |
1071 case 15: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1072 std::cerr << "SI"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1073 break; |
8535 | 1074 |
1075 case 16: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1076 std::cerr << "DLE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1077 break; |
8535 | 1078 |
1079 case 17: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1080 std::cerr << "DC1"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1081 break; |
8535 | 1082 |
1083 case 18: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1084 std::cerr << "DC2"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1085 break; |
8535 | 1086 |
1087 case 19: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1088 std::cerr << "DC3"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1089 break; |
8535 | 1090 |
1091 case 20: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1092 std::cerr << "DC4"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1093 break; |
8535 | 1094 |
1095 case 21: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1096 std::cerr << "NAK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1097 break; |
8535 | 1098 |
1099 case 22: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1100 std::cerr << "SYN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1101 break; |
8535 | 1102 |
1103 case 23: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1104 std::cerr << "ETB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1105 break; |
8535 | 1106 |
1107 case 24: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1108 std::cerr << "CAN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1109 break; |
8535 | 1110 |
1111 case 25: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1112 std::cerr << "EM"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1113 break; |
8535 | 1114 |
1115 case 26: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1116 std::cerr << "SUB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1117 break; |
8535 | 1118 |
1119 case 27: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1120 std::cerr << "ESC"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1121 break; |
8535 | 1122 |
1123 case 28: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1124 std::cerr << "FS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1125 break; |
8535 | 1126 |
1127 case 29: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1128 std::cerr << "GS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1129 break; |
8535 | 1130 |
1131 case 30: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1132 std::cerr << "RS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1133 break; |
8535 | 1134 |
1135 case 31: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1136 std::cerr << "US"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1137 break; |
8535 | 1138 |
1139 case 32: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1140 std::cerr << "SPACE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1141 break; |
8535 | 1142 |
1143 case 127: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1144 std::cerr << "DEL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1145 break; |
8535 | 1146 } |
1147 } | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1148 |
13973
2c664266e9d0
clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents:
13260
diff
changeset
|
1149 void |
2c664266e9d0
clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents:
13260
diff
changeset
|
1150 cleanup_parser (void) |
2c664266e9d0
clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents:
13260
diff
changeset
|
1151 { |
1 | 1152 } |
1153 | |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1154 // Return 1 if the given character matches any character in the given |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1155 // string. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1156 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1157 static bool |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1158 match_any (char c, const char *s) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1159 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1160 char tmp; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1161 while ((tmp = *s++) != '\0') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1162 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1163 if (c == tmp) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1164 return true; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1165 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1166 return false; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1167 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1168 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1169 // Given information about the spacing surrounding an operator, |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1170 // return 1 if it looks like it should be treated as a binary |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1171 // operator. For example, |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1172 // |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1173 // [ 1 + 2 ] or [ 1+ 2] or [ 1+2 ] ==> binary |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1174 // |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1175 // [ 1 +2 ] ==> unary |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1176 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1177 static bool |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1178 looks_like_bin_op (bool spc_prev, int next_char) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1179 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1180 bool spc_next = (next_char == ' ' || next_char == '\t'); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1181 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1182 return ((spc_prev && spc_next) || ! spc_prev); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1183 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1184 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1185 bool |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1186 is_keyword (const std::string& s) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1187 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1188 // Parsing function names like "set.property_name" inside |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1189 // classdef-style class definitions is simplified by handling the |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1190 // "set" and "get" portions of the names using the same mechanism as |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1191 // is used for keywords. However, they are not really keywords in |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1192 // the language, so omit them from the list of possible keywords. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1193 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1194 return (octave_kw_hash::in_word_set (s.c_str (), s.length ()) != 0 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1195 && ! (s == "set" || s == "get")); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1196 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1197 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1198 DEFUN (iskeyword, args, , |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1199 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1200 @deftypefn {Built-in Function} {} iskeyword ()\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1201 @deftypefnx {Built-in Function} {} iskeyword (@var{name})\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1202 Return true if @var{name} is an Octave keyword. If @var{name}\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1203 is omitted, return a list of keywords.\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1204 @seealso{isvarname, exist}\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1205 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1206 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1207 octave_value retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1208 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1209 int argc = args.length () + 1; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1210 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1211 string_vector argv = args.make_argv ("iskeyword"); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1212 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1213 if (error_state) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1214 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1215 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1216 if (argc == 1) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1217 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1218 // Neither set and get are keywords. See the note in the |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1219 // is_keyword function for additional details. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1220 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1221 string_vector lst (TOTAL_KEYWORDS); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1222 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1223 int j = 0; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1224 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1225 for (int i = 0; i < TOTAL_KEYWORDS; i++) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1226 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1227 std::string tmp = wordlist[i].name; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1228 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1229 if (! (tmp == "set" || tmp == "get")) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1230 lst[j++] = tmp; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1231 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1232 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1233 lst.resize (j); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1234 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1235 retval = Cell (lst.sort ()); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1236 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1237 else if (argc == 2) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1238 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1239 retval = is_keyword (argv[1]); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1240 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1241 else |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1242 print_usage (); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1243 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1244 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1245 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1246 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1247 /* |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1248 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1249 %!assert (iskeyword ("for")) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1250 %!assert (iskeyword ("fort"), false) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1251 %!assert (iskeyword ("fft"), false) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1252 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1253 */ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1254 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1255 // Used to delete trailing white space from tokens. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1256 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1257 static std::string |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1258 strip_trailing_whitespace (char *s) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1259 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1260 std::string retval = s; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1261 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1262 size_t pos = retval.find_first_of (" \t"); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1263 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1264 if (pos != std::string::npos) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1265 retval.resize (pos); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1266 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1267 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1268 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1269 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1270 DEFUN (__display_tokens__, args, nargout, |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1271 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1272 @deftypefn {Built-in Function} {} __display_tokens__ ()\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1273 Query or set the internal variable that determines whether Octave's\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1274 lexer displays tokens as they are read.\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1275 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1276 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1277 return SET_INTERNAL_VARIABLE (display_tokens); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1278 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1279 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1280 DEFUN (__token_count__, , , |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1281 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1282 @deftypefn {Built-in Function} {} __token_count__ ()\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1283 Number of language tokens processed since Octave startup.\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1284 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1285 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1286 return octave_value (Vtoken_count); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1287 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1288 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1289 DEFUN (__lexer_debug_flag__, args, nargout, |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1290 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1291 @deftypefn {Built-in Function} {@var{old_val} =} __lexer_debug_flag__ (@var{new_val}))\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1292 Undocumented internal function.\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1293 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1294 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1295 octave_value retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1296 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1297 retval = set_internal_variable (lexer_debug_flag, args, nargout, |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1298 "__lexer_debug_flag__"); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1299 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1300 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1301 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1302 |
16117
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1303 class |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1304 flex_stream_reader : public stream_reader |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1305 { |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1306 public: |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1307 flex_stream_reader (octave_lexer *l, char *buf_arg) |
16117
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1308 : stream_reader (), lexer (l), buf (buf_arg) |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1309 { } |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1310 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1311 int getc (void) { return lexer->text_yyinput (); } |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1312 int ungetc (int c) { lexer->xunput (c, buf); return 0; } |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1313 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1314 private: |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1315 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1316 // No copying! |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1317 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1318 flex_stream_reader (const flex_stream_reader&); |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1319 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1320 flex_stream_reader& operator = (const flex_stream_reader&); |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1321 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1322 octave_lexer *lexer; |
16117
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1323 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1324 char *buf; |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1325 }; |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1326 |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16183
diff
changeset
|
1327 lexical_feedback::~lexical_feedback (void) |
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16183
diff
changeset
|
1328 { |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
1329 tokens.clear (); |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1330 } |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1331 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1332 void |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1333 lexical_feedback::init (void) |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1334 { |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1335 // The closest paren, brace, or bracket nesting is not an object |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1336 // index. |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1337 looking_at_object_index.push_front (false); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1338 } |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1339 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1340 void |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1341 lexical_feedback::reset (void) |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1342 { |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1343 end_of_input = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1344 convert_spaces_to_comma = true; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1345 do_comma_insert = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1346 at_beginning_of_statement = true; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1347 looking_at_anon_fcn_args = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1348 looking_at_return_list = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1349 looking_at_parameter_list = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1350 looking_at_decl_list = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1351 looking_at_initializer_expression = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1352 looking_at_matrix_or_assign_lhs = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1353 looking_for_object_index = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1354 looking_at_indirect_ref = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1355 parsing_class_method = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1356 maybe_classdef_get_set_method = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1357 parsing_classdef = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1358 quote_is_transpose = false; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1359 force_script = false; |
16199
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
1360 reading_fcn_file = false; |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
1361 reading_script_file = false; |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
1362 reading_classdef_file = false; |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1363 input_line_number = 1; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1364 current_input_column = 1; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1365 bracketflag = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1366 braceflag = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1367 looping = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1368 defining_func = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1369 looking_at_function_handle = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1370 block_comment_nesting_level = 0; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1371 token_count = 0; |
16207
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
1372 current_input_line = ""; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1373 comment_text = ""; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1374 help_text = ""; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1375 fcn_file_name = ""; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1376 fcn_file_full_name = ""; |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1377 looking_at_object_index.clear (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1378 looking_at_object_index.push_front (false); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1379 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1380 while (! parsed_function_name.empty ()) |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1381 parsed_function_name.pop (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1382 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1383 pending_local_variables.clear (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1384 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1385 nesting_level.reset (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1386 |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
1387 tokens.clear (); |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1388 } |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1389 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1390 int |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1391 lexical_feedback::previous_token_value (void) const |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1392 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1393 const token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1394 return tok ? tok->token_value () : 0; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1395 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1396 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1397 bool |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1398 lexical_feedback::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
|
1399 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1400 const token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1401 return tok ? tok->token_value_is (tok_val) : false; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1402 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1403 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1404 void |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1405 lexical_feedback::mark_previous_token_trailing_space (void) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1406 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1407 token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1408 if (tok && ! previous_token_value_is ('\n')) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1409 tok->mark_trailing_space (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1410 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1411 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1412 bool |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1413 lexical_feedback::space_follows_previous_token (void) const |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1414 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1415 const token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1416 return tok ? tok->space_follows_token () : false; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1417 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1418 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1419 static bool |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1420 looks_like_copyright (const std::string& s) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1421 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1422 bool retval = false; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1423 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1424 if (! s.empty ()) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1425 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1426 size_t offset = s.find_first_not_of (" \t"); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1427 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1428 retval = (s.substr (offset, 9) == "Copyright" || s.substr (offset, 6) == "Author"); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1429 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1430 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1431 return retval; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1432 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1433 |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1434 void |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1435 octave_lexer::input_buffer::fill (const std::string& input, bool eof_arg) |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1436 { |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1437 buffer = input; |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1438 chars_left = buffer.length (); |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1439 pos = buffer.c_str (); |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1440 eof = eof_arg; |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1441 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1442 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1443 int |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1444 octave_lexer::input_buffer::copy_chunk (char *buf, size_t max_size) |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1445 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1446 static const char * const eol = "\n"; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1447 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1448 size_t len = max_size > chars_left ? chars_left : max_size; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1449 assert (len > 0); |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1450 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1451 memcpy (buf, pos, len); |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1452 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1453 chars_left -= len; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1454 pos += len; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1455 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1456 // Make sure input ends with a new line character. |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1457 if (chars_left == 0 && buf[len-1] != '\n') |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1458 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1459 if (len < max_size) |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1460 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1461 // There is enough room to plug the newline character in |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1462 // the buffer. |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1463 buf[len++] = '\n'; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1464 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1465 else |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1466 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1467 // There isn't enough room to plug the newline character |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1468 // in the buffer so arrange to have it returned on the next |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1469 // call to octave_lexer::read. |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1470 pos = eol; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1471 chars_left = 1; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1472 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1473 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1474 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1475 return len; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1476 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1477 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1478 octave_lexer::~octave_lexer (void) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1479 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1480 yylex_destroy (scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1481 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1482 |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1483 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1484 octave_lexer::init (void) |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1485 { |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1486 yylex_init (&scanner); |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1487 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1488 // Make octave_lexer object available through yyextra in |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1489 // flex-generated lexer. |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1490 yyset_extra (this, scanner); |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1491 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1492 clear_start_state (); |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1493 } |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1494 |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1495 // Inside Flex-generated functions, yyg is the scanner cast to its real |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1496 // type. Some flex macros that we use in octave_lexer member functions |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1497 // (for example, BEGIN) use yyg. If we could perform the actions of |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1498 // these macros with functions instead, we could eliminate the |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1499 // OCTAVE_YYG macro. |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1500 |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1501 #define OCTAVE_YYG \ |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1502 struct yyguts_t *yyg = static_cast<struct yyguts_t*> (scanner) |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1503 |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1504 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1505 octave_lexer::reset (void) |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1506 { |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1507 // Start off on the right foot. |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1508 clear_start_state (); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1509 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1510 parser_symtab_context.clear (); |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1511 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1512 // We do want a prompt by default. |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1513 promptflag (1); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1514 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1515 // Only ask for input from stdin if we are expecting interactive |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1516 // input. |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1517 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1518 if (! quitting_gracefully |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1519 && (interactive || forced_interactive) |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1520 && ! (reading_fcn_file |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1521 || reading_classdef_file |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1522 || reading_script_file |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1523 || input_from_eval_string ())) |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1524 yyrestart (stdin, scanner); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1525 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1526 input_reader.reset (); |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1527 |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1528 lexical_feedback::reset (); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1529 } |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1530 |
16124
3be725cd195b
move more lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16123
diff
changeset
|
1531 void |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1532 octave_lexer::prep_for_file (void) |
16124
3be725cd195b
move more lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16123
diff
changeset
|
1533 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1534 reading_script_file = true; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1535 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1536 push_start_state (INPUT_FILE_START); |
16124
3be725cd195b
move more lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16123
diff
changeset
|
1537 } |
3be725cd195b
move more lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16123
diff
changeset
|
1538 |
16121
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1539 int |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1540 octave_lexer::read (char *buf, unsigned max_size) |
16121
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1541 { |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1542 int status = 0; |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1543 |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1544 if (input_buf.empty ()) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1545 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1546 bool eof = false; |
16207
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
1547 current_input_line = input_reader.get_input (eof); |
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
1548 input_buf.fill (current_input_line, eof); |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1549 } |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1550 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1551 if (! input_buf.empty ()) |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1552 status = input_buf.copy_chunk (buf, max_size); |
16121
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1553 else |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1554 { |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1555 status = YY_NULL; |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1556 |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1557 if (! input_buf.at_eof ()) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1558 fatal_error ("octave_lexer::read () in flex scanner failed"); |
16121
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1559 } |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1560 |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1561 return status; |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1562 } |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1563 |
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
|
1564 int |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1565 octave_lexer::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
|
1566 { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1567 lexer_debug ("<<EOF>>"); |
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
|
1568 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1569 if (block_comment_nesting_level != 0) |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1570 { |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1571 warning ("block comment open at end of input"); |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1572 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1573 if ((reading_fcn_file || reading_script_file || reading_classdef_file) |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1574 && ! fcn_file_name.empty ()) |
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
|
1575 warning ("near line %d of file '%s.m'", |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1576 input_line_number, fcn_file_name.c_str ()); |
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
|
1577 } |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1578 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1579 return handle_token (END_OF_INPUT); |
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
|
1580 } |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1581 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1582 char * |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1583 octave_lexer::flex_yytext (void) |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1584 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1585 return yyget_text (scanner); |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1586 } |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1587 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
1588 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1589 octave_lexer::flex_yyleng (void) |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
1590 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1591 return yyget_leng (scanner); |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
1592 } |
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
1593 |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1594 // GAG. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1595 // |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1596 // If we're reading a matrix and the next character is '[', make sure |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1597 // that we insert a comma ahead of it. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1598 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1599 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1600 octave_lexer::do_comma_insert_check (void) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1601 { |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1602 bool spc_gobbled = (eat_continuation () != octave_lexer::NO_WHITESPACE); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1603 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1604 int c = text_yyinput (); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1605 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1606 xunput (c); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1607 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1608 if (spc_gobbled) |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1609 xunput (' '); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1610 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1611 do_comma_insert = (! looking_at_object_index.front () |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1612 && bracketflag && c == '['); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1613 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1614 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1615 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1616 octave_lexer::text_yyinput (void) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1617 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1618 int c = yyinput (scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1619 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1620 if (lexer_debug_flag) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1621 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1622 std::cerr << "I: "; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1623 display_character (c); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1624 std::cerr << std::endl; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1625 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1626 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1627 // Convert CRLF into just LF and single CR into LF. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1628 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1629 if (c == '\r') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1630 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1631 c = yyinput (scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1632 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1633 if (lexer_debug_flag) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1634 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1635 std::cerr << "I: "; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1636 display_character (c); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1637 std::cerr << std::endl; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1638 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1639 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1640 if (c != '\n') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1641 { |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1642 xunput (c); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1643 c = '\n'; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1644 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1645 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1646 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1647 if (c == '\n') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1648 input_line_number++; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1649 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1650 return c; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1651 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1652 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1653 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1654 octave_lexer::xunput (char c, char *buf) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1655 { |
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
|
1656 if (c != EOF) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1657 { |
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
|
1658 if (lexer_debug_flag) |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1659 { |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1660 std::cerr << "U: "; |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1661 display_character (c); |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1662 std::cerr << std::endl; |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1663 } |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1664 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1665 if (c == '\n') |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1666 input_line_number--; |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1667 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1668 yyunput (c, buf, scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1669 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1670 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1671 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1672 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1673 octave_lexer::xunput (char c) |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1674 { |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1675 char *yytxt = flex_yytext (); |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1676 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1677 xunput (c, yytxt); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1678 } |
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1679 |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1680 // If we read some newlines, we need figure out what column we're |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1681 // really looking at. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1682 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1683 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1684 octave_lexer::fixup_column_count (char *s) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1685 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1686 char c; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1687 while ((c = *s++) != '\0') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1688 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1689 if (c == '\n') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1690 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1691 input_line_number++; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1692 current_input_column = 1; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1693 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1694 else |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1695 current_input_column++; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1696 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1697 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1698 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1699 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1700 octave_lexer::inside_any_object_index (void) |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1701 { |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1702 bool retval = false; |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1703 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1704 for (std::list<bool>::const_iterator i = looking_at_object_index.begin (); |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1705 i != looking_at_object_index.end (); i++) |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1706 { |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1707 if (*i) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1708 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1709 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1710 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1711 } |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1712 } |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1713 |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1714 return retval; |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1715 } |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1716 |
4238 | 1717 // Handle keywords. Return -1 if the keyword should be ignored. |
767 | 1718 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1719 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1720 octave_lexer::is_keyword_token (const std::string& s) |
1 | 1721 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1722 int l = input_line_number; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1723 int c = current_input_column; |
3805 | 1724 |
1823 | 1725 int len = s.length (); |
922 | 1726 |
5088 | 1727 const octave_kw *kw = octave_kw_hash::in_word_set (s.c_str (), len); |
191 | 1728 |
1497 | 1729 if (kw) |
143 | 1730 { |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
1731 token *tok_val = 0; |
1497 | 1732 |
1733 switch (kw->kw_id) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1734 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1735 case break_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1736 case catch_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1737 case continue_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1738 case else_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1739 case otherwise_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1740 case return_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1741 case unwind_protect_cleanup_kw: |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1742 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1743 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1744 |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1745 case static_kw: |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1746 if ((reading_fcn_file || reading_script_file |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1747 || reading_classdef_file) |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1748 && ! fcn_file_full_name.empty ()) |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1749 warning_with_id ("Octave:deprecated-keyword", |
15468
6437fa7263dd
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
15467
diff
changeset
|
1750 "the 'static' keyword is obsolete and will be removed from a future version of Octave; please use 'persistent' instead; near line %d of file '%s'", |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1751 input_line_number, |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1752 fcn_file_full_name.c_str ()); |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1753 else |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1754 warning_with_id ("Octave:deprecated-keyword", |
15468
6437fa7263dd
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
15467
diff
changeset
|
1755 "the 'static' keyword is obsolete and will be removed from a future version of Octave; please use 'persistent' instead; near line %d", |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1756 input_line_number); |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1757 // fall through ... |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1758 |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1759 case persistent_kw: |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1760 break; |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
1761 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1762 case case_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1763 case elseif_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1764 case global_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1765 case until_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1766 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1767 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1768 case end_kw: |
14645
cbc00b587f36
also allow "end" indexing in classdef files
John W. Eaton <jwe@octave.org>
parents:
14642
diff
changeset
|
1769 if (inside_any_object_index () |
cbc00b587f36
also allow "end" indexing in classdef files
John W. Eaton <jwe@octave.org>
parents:
14642
diff
changeset
|
1770 || (! reading_classdef_file |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1771 && (defining_func |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1772 && ! (looking_at_return_list |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1773 || parsed_function_name.top ())))) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1774 return 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1775 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1776 tok_val = new token (end_kw, token::simple_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1777 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1778 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1779 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1780 case end_try_catch_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1781 tok_val = new token (end_try_catch_kw, token::try_catch_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1782 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1783 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1784 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1785 case end_unwind_protect_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1786 tok_val = new token (end_unwind_protect_kw, |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1787 token::unwind_protect_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1788 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1789 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1790 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1791 case endfor_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1792 tok_val = new token (endfor_kw, token::for_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1793 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1794 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1795 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1796 case endfunction_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1797 tok_val = new token (endfunction_kw, token::function_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1798 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1799 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1800 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1801 case endif_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1802 tok_val = new token (endif_kw, token::if_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1803 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1804 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1805 |
13246 | 1806 case endparfor_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1807 tok_val = new token (endparfor_kw, token::parfor_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1808 at_beginning_of_statement = true; |
13246 | 1809 break; |
1810 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1811 case endswitch_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1812 tok_val = new token (endswitch_kw, token::switch_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1813 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1814 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1815 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1816 case endwhile_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1817 tok_val = new token (endwhile_kw, token::while_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1818 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1819 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1820 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1821 case endclassdef_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1822 tok_val = new token (endclassdef_kw, token::classdef_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1823 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1824 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1825 |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
1826 case endenumeration_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1827 tok_val = new token (endenumeration_kw, token::enumeration_end, |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1828 l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1829 at_beginning_of_statement = true; |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
1830 break; |
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
1831 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1832 case endevents_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1833 tok_val = new token (endevents_kw, token::events_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1834 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1835 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1836 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1837 case endmethods_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1838 tok_val = new token (endmethods_kw, token::methods_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1839 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1840 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1841 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1842 case endproperties_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1843 tok_val = new token (endproperties_kw, token::properties_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1844 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1845 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1846 |
13245
027a2186cd90
parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents:
13237
diff
changeset
|
1847 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1848 case for_kw: |
13245
027a2186cd90
parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents:
13237
diff
changeset
|
1849 case parfor_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1850 case while_kw: |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1851 decrement_promptflag (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1852 looping++; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1853 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1854 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1855 case do_kw: |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1856 at_beginning_of_statement = true; |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1857 decrement_promptflag (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1858 looping++; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1859 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1860 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1861 case try_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1862 case unwind_protect_kw: |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1863 at_beginning_of_statement = true; |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1864 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1865 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1866 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1867 case if_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1868 case switch_kw: |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1869 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1870 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1871 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1872 case get_kw: |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1873 case set_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1874 // 'get' and 'set' are keywords in classdef method |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1875 // declarations. |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1876 if (! maybe_classdef_get_set_method) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1877 return 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1878 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1879 |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
1880 case enumeration_kw: |
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
1881 case events_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1882 case methods_kw: |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
1883 case properties_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1884 // 'properties', 'methods' and 'events' are keywords for |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1885 // classdef blocks. |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1886 if (! parsing_classdef) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1887 return 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1888 // fall through ... |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1889 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1890 case classdef_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1891 // 'classdef' is always a keyword. |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1892 decrement_promptflag (); |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1893 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1894 if (! force_script && token_count == 0 && input_from_file ()) |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1895 { |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1896 reading_classdef_file = true; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1897 reading_script_file = false; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1898 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1899 break; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1900 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1901 case function_kw: |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1902 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1903 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1904 defining_func++; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1905 parsed_function_name.push (false); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1906 |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1907 if (! force_script && token_count == 0 && input_from_file ()) |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1908 { |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1909 reading_fcn_file = true; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1910 reading_script_file = false; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1911 } |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1912 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1913 if (! (reading_fcn_file || reading_script_file |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1914 || reading_classdef_file)) |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1915 input_line_number = 1; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1916 break; |
1497 | 1917 |
3174 | 1918 case magic_file_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1919 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1920 if ((reading_fcn_file || reading_script_file |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1921 || reading_classdef_file) |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1922 && ! fcn_file_full_name.empty ()) |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1923 tok_val = new token (magic_file_kw, fcn_file_full_name, l, c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1924 else |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1925 tok_val = new token (magic_file_kw, "stdin", l, c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1926 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1927 break; |
3174 | 1928 |
1929 case magic_line_kw: | |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1930 tok_val = new token (magic_line_kw, static_cast<double> (l), |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1931 "", l, c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1932 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1933 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1934 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1935 panic_impossible (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1936 } |
1497 | 1937 |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
1938 if (! tok_val) |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1939 tok_val = new token (kw->tok, l, c); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
1940 |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
1941 push_token (tok_val); |
1497 | 1942 |
1943 return kw->tok; | |
143 | 1944 } |
1 | 1945 |
1946 return 0; | |
1947 } | |
1948 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1949 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1950 octave_lexer::is_variable (const std::string& name) |
2702 | 1951 { |
8001
ff9e7873f8ea
improve handling of command-style names in matrix_or_assign_lhs context
John W. Eaton <jwe@octave.org>
parents:
7898
diff
changeset
|
1952 return (symbol_table::is_variable (name) |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1953 || (pending_local_variables.find (name) |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1954 != pending_local_variables.end ())); |
2702 | 1955 } |
1956 | |
3263 | 1957 // Recognize separators. If the separator is a CRLF pair, it is |
1958 // replaced by a single LF. | |
1959 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1960 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1961 octave_lexer::next_token_is_sep_op (void) |
3263 | 1962 { |
1963 bool retval = false; | |
1964 | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
1965 int c = text_yyinput (); |
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
1966 |
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
1967 retval = match_any (c, ",;\n]"); |
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
1968 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1969 xunput (c); |
3263 | 1970 |
1971 return retval; | |
1972 } | |
1973 | |
767 | 1974 // Try to determine if the next token should be treated as a postfix |
1975 // unary operator. This is ugly, but it seems to do the right thing. | |
1976 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1977 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1978 octave_lexer::next_token_is_postfix_unary_op (bool spc_prev) |
1 | 1979 { |
2857 | 1980 bool un_op = false; |
1 | 1981 |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
1982 int c0 = text_yyinput (); |
1 | 1983 |
3246 | 1984 if (c0 == '\'' && ! spc_prev) |
1985 { | |
1986 un_op = true; | |
1987 } | |
1988 else if (c0 == '.') | |
1989 { | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
1990 int c1 = text_yyinput (); |
3246 | 1991 un_op = (c1 == '\''); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1992 xunput (c1); |
3246 | 1993 } |
4613 | 1994 else if (c0 == '+') |
1995 { | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
1996 int c1 = text_yyinput (); |
4613 | 1997 un_op = (c1 == '+'); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1998 xunput (c1); |
4613 | 1999 } |
2000 else if (c0 == '-') | |
2001 { | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2002 int c1 = text_yyinput (); |
4613 | 2003 un_op = (c1 == '-'); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2004 xunput (c1); |
4613 | 2005 } |
1 | 2006 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2007 xunput (c0); |
1 | 2008 |
2009 return un_op; | |
2010 } | |
2011 | |
767 | 2012 // Try to determine if the next token should be treated as a binary |
3246 | 2013 // operator. |
1521 | 2014 // |
3246 | 2015 // This kluge exists because whitespace is not always ignored inside |
3774 | 2016 // the square brackets that are used to create matrix objects (though |
2017 // spacing only really matters in the cases that can be interpreted | |
2018 // either as binary ops or prefix unary ops: currently just +, -). | |
2019 // | |
3779 | 2020 // Note that a line continuation directly following a + or - operator |
2021 // (e.g., the characters '[' 'a' ' ' '+' '\' LFD 'b' ']') will be | |
2022 // parsed as a binary operator. | |
767 | 2023 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2024 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2025 octave_lexer::next_token_is_bin_op (bool spc_prev) |
1 | 2026 { |
2857 | 2027 bool bin_op = false; |
1 | 2028 |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2029 int c0 = text_yyinput (); |
1 | 2030 |
2031 switch (c0) | |
2032 { | |
777 | 2033 case '+': |
2034 case '-': | |
3774 | 2035 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2036 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2037 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2038 switch (c1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2039 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2040 case '+': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2041 case '-': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2042 // Unary ops, spacing doesn't matter. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2043 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2044 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2045 case '=': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2046 // Binary ops, spacing doesn't matter. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2047 bin_op = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2048 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2049 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2050 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2051 // Could be either, spacing matters. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2052 bin_op = looks_like_bin_op (spc_prev, c1); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2053 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2054 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2055 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2056 xunput (c1); |
3774 | 2057 } |
2058 break; | |
2059 | |
2060 case ':': | |
3246 | 2061 case '/': |
2062 case '\\': | |
2063 case '^': | |
3774 | 2064 // Always a binary op (may also include /=, \=, and ^=). |
2065 bin_op = true; | |
1276 | 2066 break; |
2067 | |
3246 | 2068 // .+ .- ./ .\ .^ .* .** |
1554 | 2069 case '.': |
2070 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2071 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2072 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2073 if (match_any (c1, "+-/\\^*")) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2074 // Always a binary op (may also include .+=, .-=, ./=, ...). |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2075 bin_op = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2076 else if (! isdigit (c1) && c1 != ' ' && c1 != '\t' && c1 != '.') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2077 // A structure element reference is a binary op. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2078 bin_op = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2079 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2080 xunput (c1); |
1554 | 2081 } |
2082 break; | |
2083 | |
3246 | 2084 // = == & && | || * ** |
2085 case '=': | |
1 | 2086 case '&': |
3246 | 2087 case '|': |
1 | 2088 case '*': |
3774 | 2089 // Always a binary op (may also include ==, &&, ||, **). |
2090 bin_op = true; | |
3246 | 2091 break; |
2092 | |
3774 | 2093 // < <= <> > >= |
1 | 2094 case '<': |
2095 case '>': | |
3774 | 2096 // Always a binary op (may also include <=, <>, >=). |
2097 bin_op = true; | |
2098 break; | |
2099 | |
2100 // ~= != | |
777 | 2101 case '~': |
2102 case '!': | |
3246 | 2103 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2104 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2105 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2106 // ~ and ! can be unary ops, so require following =. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2107 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2108 bin_op = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2109 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2110 xunput (c1); |
3246 | 2111 } |
1 | 2112 break; |
2113 | |
2114 default: | |
1276 | 2115 break; |
1 | 2116 } |
2117 | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2118 xunput (c0); |
1 | 2119 |
2120 return bin_op; | |
2121 } | |
2122 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
2123 // FIXME -- we need to handle block comments here. |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
2124 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2125 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2126 octave_lexer::scan_for_comments (const char *text) |
3665 | 2127 { |
2128 std::string comment_buf; | |
2129 | |
2130 bool in_comment = false; | |
2131 bool beginning_of_comment = false; | |
2132 | |
2133 int len = strlen (text); | |
2134 int i = 0; | |
2135 | |
2136 while (i < len) | |
2137 { | |
2138 char c = text[i++]; | |
2139 | |
2140 switch (c) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2141 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2142 case '%': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2143 case '#': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2144 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2145 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2146 if (! beginning_of_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2147 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2148 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2149 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2150 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2151 maybe_gripe_matlab_incompatible_comment (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2152 in_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2153 beginning_of_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2154 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2155 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2156 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2157 case '\n': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2158 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2159 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2160 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2161 octave_comment_buffer::append (comment_buf); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2162 comment_buf.resize (0); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2163 in_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2164 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2165 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2166 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2167 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2168 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2169 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2170 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2171 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2172 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2173 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2174 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2175 } |
3665 | 2176 } |
2177 | |
2178 if (! comment_buf.empty ()) | |
2179 octave_comment_buffer::append (comment_buf); | |
2180 } | |
2181 | |
1001 | 2182 // Discard whitespace, including comments and continuations. |
2183 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
2184 // FIXME -- we need to handle block comments here. |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
2185 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2186 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2187 octave_lexer::eat_whitespace (void) |
975 | 2188 { |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2189 int retval = octave_lexer::NO_WHITESPACE; |
3665 | 2190 |
2191 std::string comment_buf; | |
2192 | |
2857 | 2193 bool in_comment = false; |
3665 | 2194 bool beginning_of_comment = false; |
2195 | |
2196 int c = 0; | |
2197 | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2198 while ((c = text_yyinput ()) != EOF) |
975 | 2199 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2200 current_input_column++; |
975 | 2201 |
2202 switch (c) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2203 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2204 case ' ': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2205 case '\t': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2206 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2207 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2208 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2209 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2210 } |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2211 retval |= octave_lexer::SPACE_OR_TAB; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2212 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2213 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2214 case '\n': |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2215 retval |= octave_lexer::NEWLINE; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2216 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2217 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2218 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2219 octave_comment_buffer::append (comment_buf); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2220 comment_buf.resize (0); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2221 in_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2222 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2223 } |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2224 current_input_column = 0; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2225 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2226 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2227 case '#': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2228 case '%': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2229 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2230 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2231 if (! beginning_of_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2232 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2233 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2234 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2235 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2236 maybe_gripe_matlab_incompatible_comment (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2237 in_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2238 beginning_of_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2239 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2240 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2241 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2242 case '.': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2243 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2244 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2245 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2246 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2247 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2248 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2249 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2250 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2251 if (have_ellipsis_continuation ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2252 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2253 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2254 goto done; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2255 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2256 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2257 case '\\': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2258 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2259 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2260 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2261 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2262 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2263 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2264 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2265 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2266 if (have_continuation ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2267 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2268 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2269 goto done; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2270 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2271 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2272 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2273 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2274 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2275 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2276 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2277 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2278 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2279 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2280 goto done; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2281 } |
975 | 2282 } |
2283 | |
3665 | 2284 if (! comment_buf.empty ()) |
2285 octave_comment_buffer::append (comment_buf); | |
2286 | |
975 | 2287 done: |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2288 xunput (c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2289 current_input_column--; |
1001 | 2290 return retval; |
975 | 2291 } |
2292 | |
3220 | 2293 static inline bool |
2294 looks_like_hex (const char *s, int len) | |
2295 { | |
2296 return (len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')); | |
2297 } | |
2298 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2299 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2300 octave_lexer::handle_number (void) |
972 | 2301 { |
3220 | 2302 double value = 0.0; |
2303 int nread = 0; | |
2304 | |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2305 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2306 |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2307 if (looks_like_hex (yytxt, strlen (yytxt))) |
3220 | 2308 { |
2309 unsigned long ival; | |
3598 | 2310 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2311 nread = sscanf (yytxt, "%lx", &ival); |
3598 | 2312 |
3220 | 2313 value = static_cast<double> (ival); |
2314 } | |
2315 else | |
3598 | 2316 { |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2317 char *tmp = strsave (yytxt); |
3598 | 2318 |
2319 char *idx = strpbrk (tmp, "Dd"); | |
2621 | 2320 |
3598 | 2321 if (idx) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2322 *idx = 'e'; |
3598 | 2323 |
2324 nread = sscanf (tmp, "%lf", &value); | |
2325 | |
2326 delete [] tmp; | |
2327 } | |
972 | 2328 |
1826 | 2329 // If yytext doesn't contain a valid number, we are in deep doo doo. |
985 | 2330 |
972 | 2331 assert (nread == 1); |
2332 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2333 quote_is_transpose = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2334 convert_spaces_to_comma = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2335 looking_for_object_index = false; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2336 at_beginning_of_statement = false; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2337 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2338 push_token (new token (NUM, value, yytxt, input_line_number, |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
2339 current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2340 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
2341 current_input_column += flex_yyleng (); |
972 | 2342 |
2343 do_comma_insert_check (); | |
2344 } | |
2345 | |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2346 void |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2347 octave_lexer::handle_continuation (void) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2348 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2349 char *yytxt = flex_yytext (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2350 int yylng = flex_yyleng (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2351 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2352 size_t offset = 1; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2353 if (yytxt[0] == '\\') |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2354 gripe_matlab_incompatible_continuation (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2355 else |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2356 offset = 3; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2357 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2358 bool have_space = false; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2359 while (offset < yylng) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2360 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2361 char c = yytxt[offset]; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2362 if (c == ' ' || c == '\t') |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2363 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2364 have_space = true; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2365 offset++; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2366 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2367 else |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2368 break; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2369 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2370 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2371 if (have_space) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2372 mark_previous_token_trailing_space (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2373 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2374 bool have_comment = false; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2375 while (offset < yylng) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2376 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2377 char c = yytxt[offset]; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2378 if (c == '#' || c == '%') |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2379 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2380 have_comment = true; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2381 offset++; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2382 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2383 else |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2384 break; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2385 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2386 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2387 if (have_comment) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2388 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2389 comment_text = &yytxt[offset]; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2390 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2391 finish_comment (octave_comment_elt::end_of_line, true); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2392 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2393 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2394 decrement_promptflag (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2395 input_line_number++; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2396 current_input_column = 1; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2397 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2398 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2399 void |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2400 octave_lexer::finish_comment (octave_comment_elt::comment_type typ, |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2401 bool looking_at_continuation) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2402 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2403 bool copyright = looks_like_copyright (comment_text); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2404 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2405 if (nesting_level.none () && help_text.empty () |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2406 && ! comment_text.empty () && ! copyright) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2407 help_text = comment_text; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2408 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2409 if (copyright) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2410 typ = octave_comment_elt::copyright; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2411 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2412 octave_comment_buffer::append (comment_text, typ); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2413 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2414 comment_text = ""; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2415 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2416 quote_is_transpose = false; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2417 convert_spaces_to_comma = true; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2418 at_beginning_of_statement = true; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2419 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2420 if (! looking_at_continuation) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2421 xunput ('\n'); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2422 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2423 |
1001 | 2424 // We have seen a backslash and need to find out if it should be |
2425 // treated as a continuation character. If so, this eats it, up to | |
2426 // and including the new line character. | |
2427 // | |
973 | 2428 // Match whitespace only, followed by a comment character or newline. |
2429 // Once a comment character is found, discard all input until newline. | |
2430 // If non-whitespace characters are found before comment | |
2431 // characters, return 0. Otherwise, return 1. | |
2432 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
2433 // FIXME -- we need to handle block comments here. |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
2434 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2435 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2436 octave_lexer::have_continuation (bool trailing_comments_ok) |
973 | 2437 { |
5765 | 2438 std::ostringstream buf; |
973 | 2439 |
3665 | 2440 std::string comment_buf; |
2441 | |
2857 | 2442 bool in_comment = false; |
3665 | 2443 bool beginning_of_comment = false; |
2444 | |
2445 int c = 0; | |
2446 | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2447 while ((c = text_yyinput ()) != EOF) |
973 | 2448 { |
3802 | 2449 buf << static_cast<char> (c); |
973 | 2450 |
2451 switch (c) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2452 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2453 case ' ': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2454 case '\t': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2455 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2456 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2457 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2458 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2459 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2460 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2461 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2462 case '%': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2463 case '#': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2464 if (trailing_comments_ok) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2465 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2466 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2467 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2468 if (! beginning_of_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2469 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2470 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2471 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2472 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2473 maybe_gripe_matlab_incompatible_comment (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2474 in_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2475 beginning_of_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2476 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2477 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2478 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2479 goto cleanup; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2480 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2481 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2482 case '\n': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2483 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2484 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2485 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2486 octave_comment_buffer::append (comment_buf); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2487 } |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2488 current_input_column = 0; |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
2489 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2490 gripe_matlab_incompatible_continuation (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2491 return true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2492 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2493 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2494 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2495 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2496 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2497 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2498 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2499 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2500 goto cleanup; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2501 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2502 } |
973 | 2503 } |
2504 | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2505 xunput (c); |
2857 | 2506 return false; |
973 | 2507 |
3096 | 2508 cleanup: |
4051 | 2509 |
5765 | 2510 std::string s = buf.str (); |
4051 | 2511 |
2512 int len = s.length (); | |
2513 while (len--) | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2514 xunput (s[len]); |
3096 | 2515 |
2857 | 2516 return false; |
973 | 2517 } |
2518 | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
2519 // We have seen a '.' and need to see if it is the start of a |
1001 | 2520 // continuation. If so, this eats it, up to and including the new |
2521 // line character. | |
2522 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2523 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2524 octave_lexer::have_ellipsis_continuation (bool trailing_comments_ok) |
973 | 2525 { |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2526 char c1 = text_yyinput (); |
973 | 2527 if (c1 == '.') |
2528 { | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2529 char c2 = text_yyinput (); |
1091 | 2530 if (c2 == '.' && have_continuation (trailing_comments_ok)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2531 return true; |
973 | 2532 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2533 { |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2534 xunput (c2); |
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2535 xunput (c1); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2536 } |
973 | 2537 } |
2538 else | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2539 xunput (c1); |
973 | 2540 |
2857 | 2541 return false; |
973 | 2542 } |
2543 | |
1001 | 2544 // See if we have a continuation line. If so, eat it and the leading |
2545 // whitespace on the next line. | |
16106
031117f4db7c
use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents:
16105
diff
changeset
|
2546 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2547 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2548 octave_lexer::eat_continuation (void) |
1001 | 2549 { |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2550 int retval = octave_lexer::NO_WHITESPACE; |
3665 | 2551 |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2552 int c = text_yyinput (); |
3665 | 2553 |
1001 | 2554 if ((c == '.' && have_ellipsis_continuation ()) |
3105 | 2555 || (c == '\\' && have_continuation ())) |
1001 | 2556 retval = eat_whitespace (); |
2557 else | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2558 xunput (c); |
1001 | 2559 |
2560 return retval; | |
2561 } | |
2562 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2563 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2564 octave_lexer::handle_string (char delim) |
973 | 2565 { |
5765 | 2566 std::ostringstream buf; |
973 | 2567 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2568 int bos_line = input_line_number; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2569 int bos_col = current_input_column; |
3805 | 2570 |
973 | 2571 int c; |
1031 | 2572 int escape_pending = 0; |
973 | 2573 |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2574 while ((c = text_yyinput ()) != EOF) |
973 | 2575 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2576 current_input_column++; |
973 | 2577 |
3105 | 2578 if (c == '\\') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2579 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2580 if (delim == '\'' || escape_pending) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2581 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2582 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2583 escape_pending = 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2584 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2585 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2586 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2587 if (have_continuation (false)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2588 escape_pending = 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2589 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2590 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2591 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2592 escape_pending = 1; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2593 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2594 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2595 continue; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2596 } |
973 | 2597 else if (c == '.') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2598 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2599 if (delim == '\'' || ! have_ellipsis_continuation (false)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2600 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2601 } |
973 | 2602 else if (c == '\n') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2603 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2604 error ("unterminated string constant"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2605 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2606 } |
973 | 2607 else if (c == delim) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2608 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2609 if (escape_pending) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2610 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2611 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2612 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2613 c = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2614 if (c == delim) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2615 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2616 buf << static_cast<char> (c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2617 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2618 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2619 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2620 std::string s; |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2621 xunput (c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2622 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2623 if (delim == '\'') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2624 s = buf.str (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2625 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2626 s = do_string_escapes (buf.str ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2627 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2628 quote_is_transpose = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2629 convert_spaces_to_comma = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2630 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2631 if (delim == '"') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2632 gripe_matlab_incompatible ("\" used as string delimiter"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2633 else if (delim == '\'') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2634 gripe_single_quote_string (); |
3400 | 2635 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2636 looking_for_object_index = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2637 at_beginning_of_statement = false; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2638 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2639 int tok = delim == '"' ? DQ_STRING : SQ_STRING; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2640 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2641 push_token (new token (tok, s, bos_line, bos_col)); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2642 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2643 return tok; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2644 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2645 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2646 } |
973 | 2647 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2648 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2649 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2650 } |
973 | 2651 |
1031 | 2652 escape_pending = 0; |
973 | 2653 } |
2654 | |
2655 return LEXICAL_ERROR; | |
2656 } | |
2657 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2658 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2659 octave_lexer::next_token_is_assign_op (void) |
3208 | 2660 { |
2661 bool retval = false; | |
2662 | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2663 int c0 = text_yyinput (); |
3208 | 2664 |
2665 switch (c0) | |
2666 { | |
2667 case '=': | |
2668 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2669 int c1 = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2670 xunput (c1); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2671 if (c1 != '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2672 retval = true; |
3208 | 2673 } |
2674 break; | |
2675 | |
2676 case '+': | |
2677 case '-': | |
2678 case '*': | |
2679 case '/': | |
2680 case '\\': | |
2681 case '&': | |
2682 case '|': | |
2683 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2684 int c1 = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2685 xunput (c1); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2686 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2687 retval = true; |
3208 | 2688 } |
2689 break; | |
2690 | |
2691 case '.': | |
2692 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2693 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2694 if (match_any (c1, "+-*/\\")) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2695 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2696 int c2 = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2697 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2698 if (c2 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2699 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2700 } |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2701 xunput (c1); |
3208 | 2702 } |
2703 break; | |
2704 | |
2705 case '>': | |
2706 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2707 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2708 if (c1 == '>') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2709 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2710 int c2 = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2711 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2712 if (c2 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2713 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2714 } |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2715 xunput (c1); |
3208 | 2716 } |
2717 break; | |
2718 | |
2719 case '<': | |
2720 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2721 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2722 if (c1 == '<') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2723 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2724 int c2 = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2725 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2726 if (c2 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2727 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2728 } |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2729 xunput (c1); |
3208 | 2730 } |
2731 break; | |
2732 | |
2733 default: | |
2734 break; | |
2735 } | |
2736 | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2737 xunput (c0); |
3208 | 2738 |
2739 return retval; | |
2740 } | |
2741 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2742 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2743 octave_lexer::next_token_is_index_op (void) |
4633 | 2744 { |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2745 int c = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2746 xunput (c); |
4633 | 2747 return c == '(' || c == '{'; |
2748 } | |
2749 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2750 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2751 octave_lexer::handle_close_bracket (bool spc_gobbled, int bracket_type) |
971 | 2752 { |
4612 | 2753 int retval = bracket_type; |
3208 | 2754 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2755 if (! nesting_level.none ()) |
971 | 2756 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2757 nesting_level.remove (); |
4613 | 2758 |
2759 if (bracket_type == ']') | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2760 bracketflag--; |
4613 | 2761 else if (bracket_type == '}') |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2762 braceflag--; |
4613 | 2763 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2764 panic_impossible (); |
971 | 2765 } |
2766 | |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
2767 pop_start_state (); |
1001 | 2768 |
4608 | 2769 if (bracket_type == ']' |
2770 && next_token_is_assign_op () | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2771 && ! looking_at_return_list) |
971 | 2772 { |
3208 | 2773 retval = CLOSE_BRACE; |
971 | 2774 } |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2775 else if ((bracketflag || braceflag) |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2776 && convert_spaces_to_comma |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2777 && (nesting_level.is_bracket () |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2778 || (nesting_level.is_brace () |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2779 && ! looking_at_object_index.front ()))) |
971 | 2780 { |
4633 | 2781 bool index_op = next_token_is_index_op (); |
2782 | |
2783 // Don't insert comma if we are looking at something like | |
2784 // | |
2785 // [x{i}{j}] or [x{i}(j)] | |
2786 // | |
2787 // but do if we are looking at | |
2788 // | |
2789 // [x{i} {j}] or [x{i} (j)] | |
2790 | |
2791 if (spc_gobbled || ! (bracket_type == '}' && index_op)) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2792 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2793 bool bin_op = next_token_is_bin_op (spc_gobbled); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2794 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2795 bool postfix_un_op = next_token_is_postfix_unary_op (spc_gobbled); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2796 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2797 bool sep_op = next_token_is_sep_op (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2798 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2799 if (! (postfix_un_op || bin_op || sep_op)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2800 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2801 maybe_warn_separator_insert (','); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2802 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2803 xunput (','); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2804 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2805 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2806 } |
971 | 2807 } |
2808 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2809 quote_is_transpose = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2810 convert_spaces_to_comma = true; |
3208 | 2811 |
2812 return retval; | |
971 | 2813 } |
2814 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2815 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2816 octave_lexer::maybe_unput_comma (int spc_gobbled) |
1072 | 2817 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2818 if (nesting_level.is_bracket () |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2819 || (nesting_level.is_brace () |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2820 && ! looking_at_object_index.front ())) |
1072 | 2821 { |
3246 | 2822 int bin_op = next_token_is_bin_op (spc_gobbled); |
1072 | 2823 |
3246 | 2824 int postfix_un_op = next_token_is_postfix_unary_op (spc_gobbled); |
1072 | 2825 |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2826 int c1 = text_yyinput (); |
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
2827 int c2 = text_yyinput (); |
2970 | 2828 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2829 xunput (c2); |
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2830 xunput (c1); |
2970 | 2831 |
3263 | 2832 int sep_op = next_token_is_sep_op (); |
2970 | 2833 |
1072 | 2834 int dot_op = (c1 == '.' |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2835 && (isalpha (c2) || isspace (c2) || c2 == '_')); |
2970 | 2836 |
3388 | 2837 if (postfix_un_op || bin_op || sep_op || dot_op) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2838 return; |
3388 | 2839 |
3985 | 2840 int index_op = (c1 == '(' || c1 == '{'); |
3388 | 2841 |
4476 | 2842 // If there is no space before the indexing op, we don't insert |
2843 // a comma. | |
2844 | |
2845 if (index_op && ! spc_gobbled) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2846 return; |
4476 | 2847 |
2848 maybe_warn_separator_insert (','); | |
2849 | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2850 xunput (','); |
1072 | 2851 } |
2852 } | |
2853 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2854 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2855 octave_lexer::next_token_can_follow_bin_op (void) |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2856 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2857 std::stack<char> buf; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2858 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2859 int c = EOF; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2860 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2861 // Skip whitespace in current statement on current line |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2862 while (true) |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2863 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2864 c = text_yyinput (); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2865 |
8767
026c6732ec7a
lex.l (next_token_can_follow_bin_op): push all characters read on to buffer stack
John W. Eaton <jwe@octave.org>
parents:
8746
diff
changeset
|
2866 buf.push (c); |
026c6732ec7a
lex.l (next_token_can_follow_bin_op): push all characters read on to buffer stack
John W. Eaton <jwe@octave.org>
parents:
8746
diff
changeset
|
2867 |
026c6732ec7a
lex.l (next_token_can_follow_bin_op): push all characters read on to buffer stack
John W. Eaton <jwe@octave.org>
parents:
8746
diff
changeset
|
2868 if (match_any (c, ",;\n") || (c != ' ' && c != '\t')) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2869 break; |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2870 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2871 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2872 // Restore input. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2873 while (! buf.empty ()) |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2874 { |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2875 xunput (buf.top ()); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2876 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2877 buf.pop (); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2878 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2879 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2880 return (isalnum (c) || match_any (c, "!\"'(-[_{~")); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2881 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2882 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2883 static bool |
10052
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2884 can_be_command (const std::string& tok) |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2885 { |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2886 // Don't allow these names to be treated as commands to avoid |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2887 // surprises when parsing things like "NaN ^2". |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2888 |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2889 return ! (tok == "e" |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2890 || tok == "I" || tok == "i" |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2891 || tok == "J" || tok == "j" |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2892 || tok == "Inf" || tok == "inf" |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2893 || tok == "NaN" || tok == "nan"); |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2894 } |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
2895 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2896 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2897 octave_lexer::looks_like_command_arg (void) |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2898 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2899 bool retval = true; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2900 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2901 int c0 = text_yyinput (); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2902 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2903 switch (c0) |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2904 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2905 // = == |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2906 case '=': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2907 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2908 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2909 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2910 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2911 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2912 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2913 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2914 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2915 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2916 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2917 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2918 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2919 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2920 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2921 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2922 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2923 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2924 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2925 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2926 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2927 case '(': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2928 case '{': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2929 // Indexing. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2930 retval = false; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2931 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2932 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2933 case '\n': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2934 // EOL. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2935 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2936 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2937 case '\'': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2938 case '"': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2939 // Beginning of a character string. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2940 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2941 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2942 // + - ++ -- += -= |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2943 case '+': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2944 case '-': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2945 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2946 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2947 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2948 switch (c1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2949 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2950 case '\n': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2951 // EOL. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2952 case '+': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2953 case '-': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2954 // Unary ops, spacing doesn't matter. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2955 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2956 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2957 case '\t': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2958 case ' ': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2959 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2960 if (next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2961 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2962 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2963 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2964 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2965 case '=': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2966 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2967 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2968 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2969 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2970 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2971 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2972 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2973 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2974 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2975 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2976 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2977 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2978 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2979 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2980 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2981 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2982 case ':': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2983 case '/': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2984 case '\\': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2985 case '^': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2986 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2987 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2988 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2989 if (! match_any (c1, ",;\n") && (c1 == ' ' || c1 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2990 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2991 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2992 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2993 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2994 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2995 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2996 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2997 // .+ .- ./ .\ .^ .* .** |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2998 case '.': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2999 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3000 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3001 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3002 if (match_any (c1, "+-/\\^*")) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3003 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3004 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3005 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3006 if (c2 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3007 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3008 int c3 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3009 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3010 if (! match_any (c3, ",;\n") && (c3 == ' ' || c3 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3011 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3012 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3013 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3014 xunput (c3); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3015 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3016 else if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3017 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3018 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3019 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3020 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3021 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3022 else if (! match_any (c1, ",;\n") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3023 && (! isdigit (c1) && c1 != ' ' && c1 != '\t' |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3024 && c1 != '.')) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3025 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3026 // Structure reference. FIXME -- is this a complete check? |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3027 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3028 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3029 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3030 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3031 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3032 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3033 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3034 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3035 // & && | || * ** |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3036 case '&': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3037 case '|': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3038 case '*': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3039 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3040 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3041 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3042 if (c1 == c0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3043 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3044 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3045 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3046 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3047 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3048 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3049 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3050 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3051 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3052 else if (! match_any (c1, ",;\n") && (c1 == ' ' || c1 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3053 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3054 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3055 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3056 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3057 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3058 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3059 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3060 // < <= > >= |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3061 case '<': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3062 case '>': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3063 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3064 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3065 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3066 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3067 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3068 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3069 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3070 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3071 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3072 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3073 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3074 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3075 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3076 else if (! match_any (c1, ",;\n") && (c1 == ' ' || c1 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3077 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3078 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3079 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3080 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3081 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3082 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3083 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3084 // ~= != |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3085 case '~': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3086 case '!': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3087 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3088 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3089 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3090 // ~ and ! can be unary ops, so require following =. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3091 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3092 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3093 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3094 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3095 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3096 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3097 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3098 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3099 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3100 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3101 else if (! match_any (c1, ",;\n") && (c1 == ' ' || c1 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3102 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3103 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3104 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3105 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3106 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3107 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3108 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3109 default: |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3110 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3111 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3112 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3113 xunput (c0); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3114 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3115 return retval; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3116 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3117 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3118 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3119 octave_lexer::handle_superclass_identifier (void) |
9476 | 3120 { |
3121 eat_continuation (); | |
3122 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3123 std::string pkg; |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3124 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3125 std::string meth = strip_trailing_whitespace (yytxt); |
9476 | 3126 size_t pos = meth.find ("@"); |
3127 std::string cls = meth.substr (pos).substr (1); | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3128 meth = meth.substr (0, pos - 1); |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3129 |
9476 | 3130 pos = cls.find ("."); |
3131 if (pos != std::string::npos) | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3132 { |
9476 | 3133 pkg = cls.substr (pos).substr (1); |
3134 cls = cls.substr (0, pos - 1); | |
3135 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3136 |
9476 | 3137 int kw_token = (is_keyword_token (meth) || is_keyword_token (cls) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3138 || is_keyword_token (pkg)); |
9476 | 3139 if (kw_token) |
3140 { | |
3141 error ("method, class and package names may not be keywords"); | |
3142 return LEXICAL_ERROR; | |
3143 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3144 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3145 push_token (new token (SUPERCLASSREF, |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3146 meth.empty () ? 0 : &(symbol_table::insert (meth)), |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3147 cls.empty () ? 0 : &(symbol_table::insert (cls)), |
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3148 pkg.empty () ? 0 : &(symbol_table::insert (pkg)), |
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3149 input_line_number, current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3150 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3151 convert_spaces_to_comma = true; |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3152 current_input_column += flex_yyleng (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3153 |
9476 | 3154 return SUPERCLASSREF; |
3155 } | |
3156 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3157 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3158 octave_lexer::handle_meta_identifier (void) |
9476 | 3159 { |
3160 eat_continuation (); | |
3161 | |
3162 std::string pkg; | |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3163 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3164 std::string cls = strip_trailing_whitespace (yytxt).substr (1); |
9476 | 3165 size_t pos = cls.find ("."); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3166 |
9476 | 3167 if (pos != std::string::npos) |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3168 { |
9476 | 3169 pkg = cls.substr (pos).substr (1); |
3170 cls = cls.substr (0, pos - 1); | |
3171 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3172 |
9476 | 3173 int kw_token = is_keyword_token (cls) || is_keyword_token (pkg); |
3174 if (kw_token) | |
3175 { | |
3176 error ("class and package names may not be keywords"); | |
3177 return LEXICAL_ERROR; | |
3178 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3179 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3180 push_token (new token (METAQUERY, |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3181 cls.empty () ? 0 : &(symbol_table::insert (cls)), |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3182 pkg.empty () ? 0 : &(symbol_table::insert (pkg)), |
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3183 input_line_number, current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3184 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3185 convert_spaces_to_comma = true; |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3186 current_input_column += flex_yyleng (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3187 |
9476 | 3188 return METAQUERY; |
3189 } | |
3190 | |
767 | 3191 // Figure out exactly what kind of token to return when we have seen |
4238 | 3192 // an identifier. Handles keywords. Return -1 if the identifier |
3193 // should be ignored. | |
767 | 3194 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3195 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3196 octave_lexer::handle_identifier (void) |
146 | 3197 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3198 bool at_bos = at_beginning_of_statement; |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3199 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3200 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3201 |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3202 std::string tok = strip_trailing_whitespace (yytxt); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
3203 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3204 int c = yytxt[flex_yyleng()-1]; |
3974 | 3205 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3206 bool cont_is_spc = (eat_continuation () != octave_lexer::NO_WHITESPACE); |
3974 | 3207 |
3208 int spc_gobbled = (cont_is_spc || c == ' ' || c == '\t'); | |
3209 | |
2970 | 3210 // If we are expecting a structure element, avoid recognizing |
3211 // keywords and other special names and return STRUCT_ELT, which is | |
3212 // a string that is also a valid identifier. But first, we have to | |
3213 // decide whether to insert a comma. | |
747 | 3214 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3215 if (looking_at_indirect_ref) |
1072 | 3216 { |
2970 | 3217 do_comma_insert_check (); |
3218 | |
1072 | 3219 maybe_unput_comma (spc_gobbled); |
2819 | 3220 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3221 push_token (new token (STRUCT_ELT, tok, input_line_number, |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3222 current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3223 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3224 quote_is_transpose = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3225 convert_spaces_to_comma = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3226 looking_for_object_index = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3227 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3228 current_input_column += flex_yyleng (); |
2819 | 3229 |
2970 | 3230 return STRUCT_ELT; |
1072 | 3231 } |
747 | 3232 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3233 at_beginning_of_statement = false; |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3234 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3235 // The is_keyword_token may reset |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3236 // at_beginning_of_statement. For example, if it sees |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3237 // an else token, then the next token is at the beginning of a |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3238 // statement. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3239 |
4930 | 3240 int kw_token = is_keyword_token (tok); |
3241 | |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3242 // If we found a keyword token, then the beginning_of_statement flag |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3243 // is already set. Otherwise, we won't be at the beginning of a |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3244 // statement. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3245 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3246 if (looking_at_function_handle) |
4930 | 3247 { |
3248 if (kw_token) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3249 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3250 error ("function handles may not refer to keywords"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3251 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3252 return LEXICAL_ERROR; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3253 } |
4930 | 3254 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3255 { |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3256 push_token (new token (FCN_HANDLE, tok, input_line_number, |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3257 current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3258 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3259 current_input_column += flex_yyleng (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3260 quote_is_transpose = false; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3261 convert_spaces_to_comma = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3262 looking_for_object_index = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3263 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3264 return FCN_HANDLE; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3265 } |
4930 | 3266 } |
3267 | |
5102 | 3268 // If we have a regular keyword, return it. |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
3269 // Keywords can be followed by identifiers. |
146 | 3270 |
3271 if (kw_token) | |
3272 { | |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
3273 if (kw_token >= 0) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3274 { |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3275 current_input_column += flex_yyleng (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3276 quote_is_transpose = false; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3277 convert_spaces_to_comma = true; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3278 looking_for_object_index = false; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3279 } |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
3280 |
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
3281 return kw_token; |
146 | 3282 } |
3283 | |
1826 | 3284 // See if we have a plot keyword (title, using, with, or clear). |
146 | 3285 |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
3286 int c1 = text_yyinput (); |
3480 | 3287 |
3288 bool next_tok_is_eq = false; | |
3289 if (c1 == '=') | |
3290 { | |
7728
13820b9f5fd9
more consistent handling of CR/CRLF/LF line endings in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
7723
diff
changeset
|
3291 int c2 = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3292 xunput (c2); |
3480 | 3293 |
3294 if (c2 != '=') | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3295 next_tok_is_eq = true; |
3480 | 3296 } |
3297 | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3298 xunput (c1); |
1001 | 3299 |
2702 | 3300 // Kluge alert. |
3301 // | |
3302 // If we are looking at a text style function, set up to gobble its | |
2745 | 3303 // arguments. |
3304 // | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
3305 // If the following token is '=', or if we are parsing a function |
3189 | 3306 // return list or function parameter list, or if we are looking at |
3307 // something like [ab,cd] = foo (), force the symbol to be inserted | |
3308 // as a variable in the current symbol table. | |
2702 | 3309 |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3310 if (! is_variable (tok)) |
2702 | 3311 { |
10052
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
3312 if (at_bos && spc_gobbled && can_be_command (tok) |
5813ec5077b5
don't allow e, i, j, inf, or nan to be commands
John W. Eaton <jwe@octave.org>
parents:
10048
diff
changeset
|
3313 && looks_like_command_arg ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3314 { |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3315 push_start_state (COMMAND_START); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3316 } |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3317 else if (next_tok_is_eq |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3318 || looking_at_decl_list |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3319 || looking_at_return_list |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3320 || (looking_at_parameter_list |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3321 && ! looking_at_initializer_expression)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3322 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3323 symbol_table::force_variable (tok); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3324 } |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3325 else if (looking_at_matrix_or_assign_lhs) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3326 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3327 pending_local_variables.insert (tok); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3328 } |
2702 | 3329 } |
3330 | |
4234 | 3331 // Find the token in the symbol table. Beware the magic |
3332 // transformation of the end keyword... | |
3333 | |
3334 if (tok == "end") | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3335 tok = "__end__"; |
146 | 3336 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3337 push_token (new token (NAME, &(symbol_table::insert (tok)), |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3338 input_line_number, current_input_column)); |
146 | 3339 |
1826 | 3340 // After seeing an identifer, it is ok to convert spaces to a comma |
3341 // (if needed). | |
146 | 3342 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3343 convert_spaces_to_comma = true; |
146 | 3344 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3345 if (! (next_tok_is_eq || start_state () == COMMAND_START)) |
2877 | 3346 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3347 quote_is_transpose = true; |
146 | 3348 |
2877 | 3349 do_comma_insert_check (); |
3350 | |
3351 maybe_unput_comma (spc_gobbled); | |
146 | 3352 } |
3353 | |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3354 current_input_column += flex_yyleng (); |
146 | 3355 |
9324
29563379fa9b
don't look for object index after keyword
John W. Eaton <jwe@octave.org>
parents:
8974
diff
changeset
|
3356 if (tok != "__end__") |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3357 looking_for_object_index = true; |
9324
29563379fa9b
don't look for object index after keyword
John W. Eaton <jwe@octave.org>
parents:
8974
diff
changeset
|
3358 |
146 | 3359 return NAME; |
3360 } | |
3361 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3362 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3363 octave_lexer::maybe_warn_separator_insert (char sep) |
3388 | 3364 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3365 std::string nm = fcn_file_full_name; |
3388 | 3366 |
5794 | 3367 if (nm.empty ()) |
3368 warning_with_id ("Octave:separator-insert", | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
3369 "potential auto-insertion of '%c' near line %d", |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3370 sep, input_line_number); |
5794 | 3371 else |
3372 warning_with_id ("Octave:separator-insert", | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
3373 "potential auto-insertion of '%c' near line %d of file %s", |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3374 sep, input_line_number, nm.c_str ()); |
3388 | 3375 } |
3376 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3377 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3378 octave_lexer::gripe_single_quote_string (void) |
3400 | 3379 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3380 std::string nm = fcn_file_full_name; |
3400 | 3381 |
5794 | 3382 if (nm.empty ()) |
3383 warning_with_id ("Octave:single-quote-string", | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3384 "single quote delimited string near line %d", |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3385 input_line_number); |
5794 | 3386 else |
3387 warning_with_id ("Octave:single-quote-string", | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3388 "single quote delimited string near line %d of file %s", |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3389 input_line_number, nm.c_str ()); |
3400 | 3390 } |
3391 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3392 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3393 octave_lexer::gripe_matlab_incompatible (const std::string& msg) |
4037 | 3394 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3395 std::string nm = fcn_file_full_name; |
8974
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3396 |
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3397 if (nm.empty ()) |
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3398 warning_with_id ("Octave:matlab-incompatible", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3399 "potential Matlab compatibility problem: %s", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3400 msg.c_str ()); |
8974
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3401 else |
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3402 warning_with_id ("Octave:matlab-incompatible", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3403 "potential Matlab compatibility problem: %s near line %d offile %s", |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3404 msg.c_str (), input_line_number, nm.c_str ()); |
4037 | 3405 } |
3406 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3407 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3408 octave_lexer::maybe_gripe_matlab_incompatible_comment (char c) |
4037 | 3409 { |
3410 if (c == '#') | |
3411 gripe_matlab_incompatible ("# used as comment character"); | |
3412 } | |
3413 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3414 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3415 octave_lexer::gripe_matlab_incompatible_continuation (void) |
4037 | 3416 { |
3417 gripe_matlab_incompatible ("\\ used as line continuation marker"); | |
3418 } | |
3419 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3420 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3421 octave_lexer::gripe_matlab_incompatible_operator (const std::string& op) |
4037 | 3422 { |
3423 std::string t = op; | |
3424 int n = t.length (); | |
3425 if (t[n-1] == '\n') | |
3426 t.resize (n-1); | |
3427 gripe_matlab_incompatible (t + " used as operator"); | |
3428 } | |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3429 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3430 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3431 octave_lexer::push_token (token *tok) |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3432 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3433 YYSTYPE *lval = yyget_lval (scanner); |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3434 lval->tok_val = tok; |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
3435 tokens.push (tok); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3436 } |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3437 |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3438 token * |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3439 octave_lexer::current_token (void) |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3440 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3441 YYSTYPE *lval = yyget_lval (scanner); |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3442 return lval->tok_val; |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3443 } |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3444 |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3445 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3446 octave_lexer::display_token (int tok) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3447 { |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3448 switch (tok) |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3449 { |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3450 case '=': std::cerr << "'='\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3451 case ':': std::cerr << "':'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3452 case '-': std::cerr << "'-'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3453 case '+': std::cerr << "'+'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3454 case '*': std::cerr << "'*'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3455 case '/': std::cerr << "'/'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3456 case ADD_EQ: std::cerr << "ADD_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3457 case SUB_EQ: std::cerr << "SUB_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3458 case MUL_EQ: std::cerr << "MUL_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3459 case DIV_EQ: std::cerr << "DIV_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3460 case LEFTDIV_EQ: std::cerr << "LEFTDIV_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3461 case POW_EQ: std::cerr << "POW_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3462 case EMUL_EQ: std::cerr << "EMUL_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3463 case EDIV_EQ: std::cerr << "EDIV_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3464 case ELEFTDIV_EQ: std::cerr << "ELEFTDIV_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3465 case EPOW_EQ: std::cerr << "EPOW_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3466 case AND_EQ: std::cerr << "AND_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3467 case OR_EQ: std::cerr << "OR_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3468 case LSHIFT_EQ: std::cerr << "LSHIFT_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3469 case RSHIFT_EQ: std::cerr << "RSHIFT_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3470 case LSHIFT: std::cerr << "LSHIFT\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3471 case RSHIFT: std::cerr << "RSHIFT\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3472 case EXPR_AND_AND: std::cerr << "EXPR_AND_AND\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3473 case EXPR_OR_OR: std::cerr << "EXPR_OR_OR\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3474 case EXPR_AND: std::cerr << "EXPR_AND\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3475 case EXPR_OR: std::cerr << "EXPR_OR\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3476 case EXPR_NOT: std::cerr << "EXPR_NOT\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3477 case EXPR_LT: std::cerr << "EXPR_LT\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3478 case EXPR_LE: std::cerr << "EXPR_LE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3479 case EXPR_EQ: std::cerr << "EXPR_EQ\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3480 case EXPR_NE: std::cerr << "EXPR_NE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3481 case EXPR_GE: std::cerr << "EXPR_GE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3482 case EXPR_GT: std::cerr << "EXPR_GT\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3483 case LEFTDIV: std::cerr << "LEFTDIV\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3484 case EMUL: std::cerr << "EMUL\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3485 case EDIV: std::cerr << "EDIV\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3486 case ELEFTDIV: std::cerr << "ELEFTDIV\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3487 case EPLUS: std::cerr << "EPLUS\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3488 case EMINUS: std::cerr << "EMINUS\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3489 case QUOTE: std::cerr << "QUOTE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3490 case TRANSPOSE: std::cerr << "TRANSPOSE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3491 case PLUS_PLUS: std::cerr << "PLUS_PLUS\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3492 case MINUS_MINUS: std::cerr << "MINUS_MINUS\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3493 case POW: std::cerr << "POW\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3494 case EPOW: std::cerr << "EPOW\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3495 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3496 case NUM: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3497 case IMAG_NUM: |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3498 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3499 token *tok_val = current_token (); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3500 std::cerr << (tok == NUM ? "NUM" : "IMAG_NUM") |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3501 << " [" << tok_val->number () << "]\n"; |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3502 } |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3503 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3504 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3505 case STRUCT_ELT: |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3506 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3507 token *tok_val = current_token (); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3508 std::cerr << "STRUCT_ELT [" << tok_val->text () << "]\n"; |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3509 } |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3510 break; |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3511 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3512 case NAME: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3513 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3514 token *tok_val = current_token (); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3515 symbol_table::symbol_record *sr = tok_val->sym_rec (); |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3516 std::cerr << "NAME"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3517 if (sr) |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3518 std::cerr << " [" << sr->name () << "]"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3519 std::cerr << "\n"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3520 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3521 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3522 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3523 case END: std::cerr << "END\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3524 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3525 case DQ_STRING: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3526 case SQ_STRING: |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3527 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3528 token *tok_val = current_token (); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3529 |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3530 std::cerr << (tok == DQ_STRING ? "DQ_STRING" : "SQ_STRING") |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3531 << " [" << tok_val->text () << "]\n"; |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3532 } |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3533 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3534 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3535 case FOR: std::cerr << "FOR\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3536 case WHILE: std::cerr << "WHILE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3537 case DO: std::cerr << "DO\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3538 case UNTIL: std::cerr << "UNTIL\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3539 case IF: std::cerr << "IF\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3540 case ELSEIF: std::cerr << "ELSEIF\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3541 case ELSE: std::cerr << "ELSE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3542 case SWITCH: std::cerr << "SWITCH\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3543 case CASE: std::cerr << "CASE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3544 case OTHERWISE: std::cerr << "OTHERWISE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3545 case BREAK: std::cerr << "BREAK\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3546 case CONTINUE: std::cerr << "CONTINUE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3547 case FUNC_RET: std::cerr << "FUNC_RET\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3548 case UNWIND: std::cerr << "UNWIND\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3549 case CLEANUP: std::cerr << "CLEANUP\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3550 case TRY: std::cerr << "TRY\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3551 case CATCH: std::cerr << "CATCH\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3552 case GLOBAL: std::cerr << "GLOBAL\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3553 case PERSISTENT: std::cerr << "PERSISTENT\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3554 case FCN_HANDLE: std::cerr << "FCN_HANDLE\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3555 case END_OF_INPUT: std::cerr << "END_OF_INPUT\n\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3556 case LEXICAL_ERROR: std::cerr << "LEXICAL_ERROR\n\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3557 case FCN: std::cerr << "FCN\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3558 case CLOSE_BRACE: std::cerr << "CLOSE_BRACE\n"; break; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3559 case INPUT_FILE: std::cerr << "INPUT_FILE\n"; break; |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3560 case SUPERCLASSREF: std::cerr << "SUPERCLASSREF\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3561 case METAQUERY: std::cerr << "METAQUERY\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3562 case GET: std::cerr << "GET\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3563 case SET: std::cerr << "SET\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3564 case PROPERTIES: std::cerr << "PROPERTIES\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3565 case METHODS: std::cerr << "METHODS\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3566 case EVENTS: std::cerr << "EVENTS\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3567 case CLASSDEF: std::cerr << "CLASSDEF\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3568 case '\n': std::cerr << "\\n\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3569 case '\r': std::cerr << "\\r\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3570 case '\t': std::cerr << "TAB\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3571 default: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3572 { |
16166
cb80b1d062b1
don't attempt to print unprintable tokens
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
3573 if (tok < 256 && tok > 31) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3574 std::cerr << static_cast<char> (tok) << "\n"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3575 else |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3576 std::cerr << "UNKNOWN(" << tok << ")\n"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3577 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3578 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3579 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3580 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3581 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3582 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3583 octave_lexer::fatal_error (const char *msg) |
16129
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3584 { |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3585 error (msg); |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3586 |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3587 OCTAVE_QUIT; |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3588 |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3589 yy_fatal_error (msg, scanner); |
16129
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3590 } |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3591 |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3592 void |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3593 octave_lexer::lexer_debug (const char *pattern) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3594 { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3595 if (lexer_debug_flag) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3596 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3597 std::cerr << std::endl; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3598 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3599 display_start_state (); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3600 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3601 std::cerr << "P: " << pattern << std::endl; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3602 std::cerr << "T: " << flex_yytext () << std::endl; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3603 } |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3604 } |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3605 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3606 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3607 octave_lexer::push_start_state (int state) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3608 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3609 OCTAVE_YYG; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3610 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3611 start_state_stack.push (state); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3612 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3613 BEGIN (start_state ()); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3614 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3615 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3616 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3617 octave_lexer::pop_start_state (void) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3618 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3619 OCTAVE_YYG; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3620 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3621 start_state_stack.pop (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3622 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3623 BEGIN (start_state ()); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3624 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3625 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3626 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3627 octave_lexer::clear_start_state (void) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3628 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3629 while (! start_state_stack.empty ()) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3630 start_state_stack.pop (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3631 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3632 push_start_state (INITIAL); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3633 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3634 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3635 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3636 octave_lexer::display_start_state (void) const |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3637 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3638 std::cerr << "S: "; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3639 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3640 switch (start_state ()) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3641 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3642 case INITIAL: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3643 std::cerr << "INITIAL" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3644 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3645 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3646 case COMMAND_START: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3647 std::cerr << "COMMAND_START" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3648 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3649 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3650 case MATRIX_START: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3651 std::cerr << "MATRIX_START" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3652 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3653 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3654 case INPUT_FILE_START: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3655 std::cerr << "INPUT_FILE_BEGIN" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3656 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3657 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3658 case BLOCK_COMMENT_START: |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3659 std::cerr << "BLOCK_COMMENT_START" << std::endl; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3660 break; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3661 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3662 case LINE_COMMENT_START: |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3663 std::cerr << "LINE_COMMENT_START" << std::endl; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3664 break; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3665 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3666 default: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3667 std::cerr << "UNKNOWN START STATE!" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3668 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3669 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3670 } |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3671 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3672 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3673 octave_lexer::handle_op (const char *pattern, int tok, bool convert, |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3674 bool bos, bool qit) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3675 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3676 return handle_op_internal (pattern, tok, convert, bos, qit, true); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3677 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3678 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3679 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3680 octave_lexer::handle_incompatible_op (const char *pattern, int tok, |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3681 bool convert, bool bos, bool qit) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3682 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3683 return handle_op_internal (pattern, tok, convert, bos, qit, false); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3684 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3685 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3686 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3687 octave_lexer::handle_op_internal (const char *pattern, int tok, bool convert, |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3688 bool bos, bool qit, bool compat) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3689 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3690 lexer_debug (pattern); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3691 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3692 if (! compat) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3693 gripe_matlab_incompatible_operator (flex_yytext ()); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3694 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3695 push_token (new token (tok, input_line_number, current_input_column)); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3696 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3697 current_input_column += flex_yyleng (); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3698 quote_is_transpose = qit; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3699 convert_spaces_to_comma = convert; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3700 looking_for_object_index = false; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3701 at_beginning_of_statement = bos; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3702 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3703 return count_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3704 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3705 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3706 int |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3707 octave_lexer::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
|
3708 { |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3709 token *tok_val = new token (tok, name, input_line_number, |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3710 current_input_column); |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3711 |
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3712 return handle_token (tok, tok_val); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3713 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3714 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3715 int |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3716 octave_lexer::handle_token (int tok, token *tok_val) |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3717 { |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3718 if (! tok_val) |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3719 tok_val = new token (tok, input_line_number, current_input_column); |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3720 |
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3721 push_token (tok_val); |
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3722 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3723 current_input_column += flex_yyleng (); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3724 quote_is_transpose = false; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3725 convert_spaces_to_comma = true; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3726 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3727 return count_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3728 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3729 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3730 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3731 octave_lexer::count_token (int tok) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3732 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3733 if (tok != '\n') |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3734 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3735 Vtoken_count++; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3736 token_count++; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3737 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3738 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3739 return show_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3740 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3741 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3742 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3743 octave_lexer::show_token (int tok) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3744 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3745 if (Vdisplay_tokens) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3746 display_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3747 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3748 if (lexer_debug_flag) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3749 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3750 std::cerr << "R: "; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3751 display_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3752 std::cerr << std::endl; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3753 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3754 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3755 return tok; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3756 } |