Mercurial > hg > octave-nkf
annotate libinterp/parse-tree/lex.ll @ 16269:488b0fef52c5
7/10 commits reworking the lexer
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 11 Mar 2013 14:31:48 -0400 |
parents | 15f55df088e7 |
children | 3b0381ea8737 87069bd38107 |
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 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
54 %x KLUGE |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
55 |
1 | 56 %{ |
240 | 57 |
1341 | 58 #include <cctype> |
59 #include <cstring> | |
60 | |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
61 #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
|
62 #include <set> |
5765 | 63 #include <sstream> |
1823 | 64 #include <string> |
4214 | 65 #include <stack> |
1823 | 66 |
4093 | 67 #include <sys/types.h> |
68 #include <unistd.h> | |
69 | |
2926 | 70 #include "cmd-edit.h" |
4153 | 71 #include "quit.h" |
4910 | 72 #include "lo-mappers.h" |
2926 | 73 |
16154
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
74 // 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
|
75 // 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
|
76 // class declarations. We can't include oct-parse.h in oct-gperf.h |
1497 | 77 // because it may not be protected to allow it to be included multiple |
78 // times. | |
79 | |
4264 | 80 #include "Cell.h" |
3665 | 81 #include "comment-list.h" |
2181 | 82 #include "defun.h" |
1355 | 83 #include "error.h" |
4910 | 84 #include "gripes.h" |
1351 | 85 #include "input.h" |
1355 | 86 #include "lex.h" |
2891 | 87 #include "ov.h" |
1355 | 88 #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
|
89 #include "parse-private.h" |
2987 | 90 #include "pt-all.h" |
2891 | 91 #include "symtab.h" |
92 #include "token.h" | |
93 #include "toplev.h" | |
1355 | 94 #include "utils.h" |
95 #include "variables.h" | |
9794
0d4613a736e9
convert build system to use automake and libtool
John W. Eaton <jwe@octave.org>
parents:
9476
diff
changeset
|
96 #include <oct-parse.h> |
2492 | 97 #include <oct-gperf.h> |
1 | 98 |
10426
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
99 #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
|
100 // 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
|
101 // 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
|
102 // 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
|
103 #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
|
104 #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
|
105 #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
|
106 #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
|
107 #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
|
108 #endif |
4db7beace28e
oct-parse.yy, lex.ll: use symbols via gnulib namespace
John W. Eaton <jwe@octave.org>
parents:
10411
diff
changeset
|
109 |
2716 | 110 #if ! (defined (FLEX_SCANNER) \ |
111 && defined (YY_FLEX_MAJOR_VERSION) && YY_FLEX_MAJOR_VERSION >= 2 \ | |
112 && defined (YY_FLEX_MINOR_VERSION) && YY_FLEX_MINOR_VERSION >= 5) | |
113 #error lex.l requires flex version 2.5.4 or later | |
114 #endif | |
115 | |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
116 #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
|
117 #define curr_lexer yyextra |
4753 | 118 |
119 // Arrange to get input via readline. | |
120 | |
121 #ifdef YY_INPUT | |
122 #undef YY_INPUT | |
123 #endif | |
124 #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
|
125 result = curr_lexer->read (buf, max_size) |
4753 | 126 |
127 // Try to avoid crashing out completely on fatal scanner errors. | |
128 | |
129 #ifdef YY_FATAL_ERROR | |
130 #undef YY_FATAL_ERROR | |
131 #endif | |
132 #define YY_FATAL_ERROR(msg) \ | |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
133 (yyget_extra (yyscanner))->fatal_error (msg) |
4753 | 134 |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
135 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
|
136 |
4910 | 137 static unsigned int Vtoken_count = 0; |
138 | |
8535 | 139 // Internal variable for lexer debugging state. |
140 static bool lexer_debug_flag = false; | |
141 | |
146 | 142 // 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
|
143 // file that are needed inside the lexer actions. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
144 |
3523 | 145 static std::string strip_trailing_whitespace (char *s); |
1 | 146 |
147 %} | |
148 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
149 D [0-9] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
150 S [ \t] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
151 NL ((\n)|(\r)|(\r\n)) |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
152 CONT ((\.\.\.)|(\\)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
153 Im [iIjJ] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
154 CCHAR [#%] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
155 IDENT ([_$a-zA-Z][_$a-zA-Z0-9]*) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
156 EXPON ([DdEe][+-]?{D}+) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
157 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
|
158 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
159 ANY_INCLUDING_NL (.|{NL}) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
160 |
1 | 161 %% |
162 | |
9474
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
163 %{ |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
164 // 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
|
165 // the parser go down a special path. |
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 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
168 <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
|
169 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
|
170 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
171 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
|
172 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
173 // 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
|
174 // as the first token. |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
175 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
|
176 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
177 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
178 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
179 return curr_lexer->show_token (INPUT_FILE); |
4238 | 180 } |
181 | |
968 | 182 %{ |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
183 // Help and other command-style functions. |
968 | 184 %} |
185 | |
4208 | 186 <COMMAND_START>{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
187 curr_lexer->lexer_debug ("<COMMAND_START>{NL}"); |
8535 | 188 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
189 curr_lexer->input_line_number++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
190 curr_lexer->current_input_column = 1; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
191 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
192 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
|
193 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
|
194 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
195 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
196 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
197 return curr_lexer->count_token ('\n'); |
967 | 198 } |
1 | 199 |
4208 | 200 <COMMAND_START>[\;\,] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
201 curr_lexer->lexer_debug ("<COMMAND_START>[\\;\\,]"); |
8535 | 202 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
203 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
|
204 curr_lexer->at_beginning_of_statement = true; |
5102 | 205 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
206 curr_lexer->pop_start_state (); |
5102 | 207 |
208 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
|
209 return curr_lexer->handle_token (','); |
967 | 210 else |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
211 return curr_lexer->handle_token (';'); |
967 | 212 } |
1 | 213 |
4208 | 214 <COMMAND_START>[\"\'] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
215 curr_lexer->lexer_debug ("<COMMAND_START>[\\\"\\']"); |
8535 | 216 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
217 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
|
218 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
219 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
|
220 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
|
221 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
222 return curr_lexer->count_token_internal (tok); |
975 | 223 } |
224 | |
4923 | 225 <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
|
226 curr_lexer->lexer_debug ("<COMMAND_START>[^#% \\t\\r\\n\\;\\,\\\"\\'][^ \\t\\r\\n\\;\\,]*{S}*"); |
8535 | 227 |
3523 | 228 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
|
229 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
230 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
|
231 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
|
232 |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
233 return curr_lexer->handle_token (tok, SQ_STRING); |
967 | 234 } |
1 | 235 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
236 <MATRIX_START>{S}* { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
237 curr_lexer->lexer_debug ("<MATRIX_START>{S}*"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
238 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
239 curr_lexer->mark_previous_token_trailing_space (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
240 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
241 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
242 <MATRIX_START>{NL} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
243 curr_lexer->lexer_debug ("<MATRIX_START>{NL}"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
244 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
245 if (curr_lexer->nesting_level.is_paren ()) |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
246 curr_lexer->gripe_matlab_incompatible ("bare newline inside parentheses"); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
247 else |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
248 { |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
249 int tok = curr_lexer->previous_token_value (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
250 |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
251 if (! (tok == ';' || tok == '[' || tok == '{')) |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
252 curr_lexer->xunput (';'); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
253 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
254 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
255 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
256 <KLUGE>@ { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
257 curr_lexer->lexer_debug ("<KLUGE>@"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
258 curr_lexer->pop_start_state (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
259 return curr_lexer->count_token (CHOOSE_ASSIGNMENT); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
260 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
261 |
968 | 262 %{ |
1 | 263 // 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
|
264 // need to know if the next token is '=' or '=='. |
1 | 265 // |
266 // It would have been so much easier if the delimiters were simply | |
267 // different for the expression on the left hand side of the equals | |
268 // operator. | |
971 | 269 // |
270 // It's also a pain in the ass to decide whether to insert a comma | |
271 // after seeing a ']' character... | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
272 |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
273 // FIXME -- we need to handle block comments here. |
968 | 274 %} |
275 | |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
276 <MATRIX_START>\] { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
277 curr_lexer->lexer_debug ("<MATRIX_START>\\]"); |
8535 | 278 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
279 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
|
280 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
281 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
|
282 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
|
283 |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
284 int tok_to_return = curr_lexer->handle_close_bracket (']'); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
285 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
286 return curr_lexer->count_token (']'); |
4608 | 287 } |
288 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
289 %{ |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
290 // 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
|
291 %} |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
292 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
293 <MATRIX_START>\} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
294 curr_lexer->lexer_debug ("<MATRIX_START>\\}*"); |
8535 | 295 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
296 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
|
297 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
298 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
|
299 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
|
300 |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
301 int tok_to_return = curr_lexer->handle_close_bracket ('}'); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
302 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
303 return curr_lexer->count_token ('}'); |
967 | 304 } |
1 | 305 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
306 \[ { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
307 curr_lexer->lexer_debug ("\\["); |
8535 | 308 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
309 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
310 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
311 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
312 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
313 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
314 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
315 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
316 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
317 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
318 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
319 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
320 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
321 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
322 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
323 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
324 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
325 } |
5615 | 326 else |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
327 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
328 curr_lexer->nesting_level.bracket (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
329 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
330 curr_lexer->looking_at_object_index.push_front (false); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
331 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
332 curr_lexer->current_input_column += yyleng; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
333 curr_lexer->looking_for_object_index = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
334 curr_lexer->at_beginning_of_statement = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
335 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
336 if (curr_lexer->defining_func |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
337 && ! curr_lexer->parsed_function_name.top ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
338 curr_lexer->looking_at_return_list = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
339 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
340 curr_lexer->looking_at_matrix_or_assign_lhs = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
341 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
342 curr_lexer->decrement_promptflag (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
343 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
344 curr_lexer->bracketflag++; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
345 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
346 curr_lexer->push_start_state (MATRIX_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
347 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
348 return curr_lexer->count_token ('['); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
349 } |
967 | 350 } |
1 | 351 |
968 | 352 \] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
353 curr_lexer->lexer_debug ("\\]"); |
8535 | 354 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
355 curr_lexer->nesting_level.remove (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
356 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
357 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
|
358 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
359 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
|
360 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
|
361 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
362 return curr_lexer->handle_token (']'); |
968 | 363 } |
364 | |
365 %{ | |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
366 // Gobble comments. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
367 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
368 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
369 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
370 // 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
|
371 // 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
|
372 // block. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
373 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
374 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
375 ^{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
|
376 curr_lexer->lexer_debug ("^{S}*{CCHAR}\{{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
377 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
378 yyless (0); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
379 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
380 if (curr_lexer->start_state () == LINE_COMMENT_START) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
381 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
382 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
|
383 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
|
384 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
385 curr_lexer->pop_start_state (); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
386 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
387 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
388 curr_lexer->push_start_state (BLOCK_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
389 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
390 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
391 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
392 <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
|
393 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
|
394 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
395 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
396 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
397 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
398 if (curr_lexer->block_comment_nesting_level) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
399 curr_lexer->comment_text = "\n"; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
400 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
401 curr_lexer->block_comment_nesting_level++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
402 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
403 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
404 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
405 // 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
|
406 // 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
|
407 // before storing the comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
408 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
409 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
410 <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
|
411 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
|
412 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
413 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
414 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
415 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
416 if (curr_lexer->block_comment_nesting_level > 1) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
417 curr_lexer->comment_text = "\n"; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
418 else |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
419 curr_lexer->finish_comment (octave_comment_elt::block); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
420 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
421 curr_lexer->block_comment_nesting_level--; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
422 curr_lexer->pop_start_state (); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
423 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
424 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
425 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
426 // Body of a block comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
427 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
428 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
429 <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
|
430 curr_lexer->lexer_debug ("<BLOCK_COMMENT_START>.*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
431 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
432 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
433 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
434 curr_lexer->comment_text += yytext; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
435 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
436 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
437 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
438 // Full-line or end-of-line comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
439 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
440 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
441 {S}*{CCHAR}.*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
442 curr_lexer->lexer_debug ("{S}*{CCHAR}.*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
443 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
444 curr_lexer->push_start_state (LINE_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
445 yyless (0); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
446 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
447 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
448 <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
|
449 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
|
450 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
451 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
|
452 curr_lexer->input_line_number++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
453 curr_lexer->current_input_column = 1; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
454 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
455 bool have_space = false; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
456 size_t len = yyleng; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
457 size_t i = 0; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
458 while (i < len) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
459 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
460 char c = yytext[i]; |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
461 if (c == ' ' || c == '\t') |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
462 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
463 have_space = true; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
464 i++; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
465 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
466 else |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
467 break; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
468 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
469 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
470 while (i < len) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
471 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
472 char c = yytext[i]; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
473 if (c == '#' || c == '%') |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
474 i++; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
475 else |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
476 break; |
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 curr_lexer->comment_text += &yytext[i]; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
480 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
481 if (! full_line_comment) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
482 { |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
483 if (have_space) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
484 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
|
485 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
486 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
|
487 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
488 curr_lexer->pop_start_state (); |
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 } |
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 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
493 // End of a block of full-line comments. |
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 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
496 <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
|
497 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
|
498 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
499 curr_lexer->xunput (yytext[0]); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
500 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
501 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
|
502 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
503 curr_lexer->pop_start_state (); |
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 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
506 %{ |
968 | 507 // Imaginary numbers. |
508 %} | |
509 | |
510 {NUMBER}{Im} { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
511 curr_lexer->lexer_debug ("{NUMBER}{Im}"); |
8535 | 512 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
513 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
514 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
515 if (curr_lexer->whitespace_is_significant () |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
516 && curr_lexer->space_follows_previous_token () |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
517 && ! (tok == '[' || tok == '{' |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
518 || curr_lexer->previous_token_is_binop ())) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
519 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
520 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
521 unput (','); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
522 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
523 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
524 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
525 curr_lexer->handle_number (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
526 return curr_lexer->count_token_internal (IMAG_NUM); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
527 } |
968 | 528 } |
529 | |
530 %{ | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
531 // Real numbers. Don't grab the '.' part of a dot operator as part of |
968 | 532 // the constant. |
533 %} | |
534 | |
8535 | 535 {D}+/\.[\*/\\^\'] | |
968 | 536 {NUMBER} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
537 curr_lexer->lexer_debug ("{D}+/\\.[\\*/\\^\\']|{NUMBER}"); |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
538 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
539 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
540 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
541 if (curr_lexer->whitespace_is_significant () |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
542 && curr_lexer->space_follows_previous_token () |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
543 && ! (tok == '[' || tok == '{' |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
544 || curr_lexer->previous_token_is_binop ())) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
545 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
546 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
547 unput (','); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
548 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
549 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
550 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
551 curr_lexer->handle_number (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
552 return curr_lexer->count_token_internal (NUM); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
553 } |
968 | 554 } |
555 | |
556 %{ | |
557 // Eat whitespace. Whitespace inside matrix constants is handled by | |
4208 | 558 // the <MATRIX_START> start state code above. |
968 | 559 %} |
560 | |
967 | 561 {S}* { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
562 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
|
563 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
564 curr_lexer->mark_previous_token_trailing_space (); |
967 | 565 } |
566 | |
968 | 567 %{ |
568 // Continuation lines. Allow comments after continuations. | |
569 %} | |
570 | |
967 | 571 {CONT}{S}*{NL} | |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
572 {CONT}{S}*{CCHAR}.*{NL} { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
573 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
|
574 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
575 curr_lexer->handle_continuation (); |
967 | 576 } |
1 | 577 |
968 | 578 %{ |
579 // End of file. | |
580 %} | |
581 | |
967 | 582 <<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
|
583 return curr_lexer->handle_end_of_input (); |
967 | 584 } |
1 | 585 |
968 | 586 %{ |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
587 // Identifiers. |
968 | 588 %} |
589 | |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
590 {IDENT} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
591 curr_lexer->lexer_debug ("{IDENT}"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
592 |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
593 int tok = curr_lexer->previous_token_value (); |
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
594 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
595 if (curr_lexer->whitespace_is_significant () |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
596 && curr_lexer->space_follows_previous_token () |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
597 && ! (tok == '[' || tok == '{' |
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
598 || curr_lexer->previous_token_is_binop ())) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
599 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
600 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
601 unput (','); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
602 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
603 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
604 { |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
605 if (! curr_lexer->looking_at_decl_list |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
606 && curr_lexer->previous_token_may_be_command ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
607 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
608 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
609 curr_lexer->push_start_state (COMMAND_START); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
610 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
611 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
612 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
613 int id_tok = curr_lexer->handle_identifier (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
614 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
615 if (id_tok >= 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
616 return curr_lexer->count_token_internal (id_tok); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
617 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
618 } |
967 | 619 } |
1 | 620 |
968 | 621 %{ |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
622 // Superclass method identifiers. |
9476 | 623 %} |
624 | |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
625 {IDENT}@{IDENT} | |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
626 {IDENT}@{IDENT}.{IDENT} { |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
627 curr_lexer->lexer_debug ("{IDENT}@{IDENT}|{IDENT}@{IDENT}.{IDENT}"); |
9476 | 628 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
629 int id_tok = curr_lexer->handle_superclass_identifier (); |
9476 | 630 |
631 if (id_tok >= 0) | |
632 { | |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
633 curr_lexer->looking_for_object_index = true; |
9476 | 634 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
635 return curr_lexer->count_token_internal (SUPERCLASSREF); |
9476 | 636 } |
637 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
638 |
9476 | 639 %{ |
640 // Metaclass query | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
641 %} |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
642 |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
643 \?{IDENT} | |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
644 \?{IDENT}\.{IDENT} { |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
645 curr_lexer->lexer_debug ("\\?{IDENT}|\\?{IDENT}\\.{IDENT}"); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
646 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
647 int id_tok = curr_lexer->handle_meta_identifier (); |
9476 | 648 |
649 if (id_tok >= 0) | |
650 { | |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
651 curr_lexer->looking_for_object_index = true; |
9476 | 652 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
653 return curr_lexer->count_token_internal (METAQUERY); |
9476 | 654 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
655 } |
9476 | 656 |
657 %{ | |
658 // Function handles and superclass references | |
4342 | 659 %} |
660 | |
4930 | 661 "@" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
662 curr_lexer->lexer_debug ("@"); |
8535 | 663 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
664 curr_lexer->current_input_column++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
665 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
666 curr_lexer->looking_at_function_handle++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
667 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
|
668 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
|
669 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
670 return curr_lexer->count_token ('@'); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
671 |
4342 | 672 } |
673 | |
674 %{ | |
968 | 675 // A new line character. New line characters inside matrix constants |
4208 | 676 // are handled by the <MATRIX_START> start state code above. If closest |
985 | 677 // nesting is inside parentheses, don't return a row separator. |
968 | 678 %} |
679 | |
967 | 680 {NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
681 curr_lexer->lexer_debug ("{NL}"); |
8535 | 682 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
683 curr_lexer->input_line_number++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
684 curr_lexer->current_input_column = 1; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
685 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
686 if (curr_lexer->nesting_level.none ()) |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
687 { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
688 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
|
689 return curr_lexer->count_token ('\n'); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
690 } |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
691 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
|
692 { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
693 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
|
694 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
|
695 } |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
696 else if (curr_lexer->nesting_level.is_bracket_or_brace ()) |
985 | 697 return LEXICAL_ERROR; |
967 | 698 } |
1 | 699 |
968 | 700 %{ |
701 // 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
|
702 // operator. |
968 | 703 %} |
704 | |
967 | 705 "'" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
706 curr_lexer->lexer_debug ("'"); |
8535 | 707 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
708 int tok = curr_lexer->previous_token_value (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
709 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
710 bool transpose = false; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
711 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
712 if (curr_lexer->whitespace_is_significant ()) |
967 | 713 { |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
714 if (curr_lexer->space_follows_previous_token ()) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
715 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
716 if (tok == '[' || tok == '{' |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
717 || curr_lexer->previous_token_is_binop ()) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
718 { |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
719 curr_lexer->current_input_column++; |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
720 int retval = curr_lexer->handle_string ('\''); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
721 return curr_lexer->count_token_internal (retval); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
722 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
723 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
724 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
725 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
726 curr_lexer->xunput (','); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
727 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
728 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
729 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
730 { |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
731 if (tok == '[' || tok == '{' |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
732 || curr_lexer->previous_token_is_binop () |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
733 || curr_lexer->previous_token_is_keyword ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
734 { |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
735 curr_lexer->current_input_column++; |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
736 int retval = curr_lexer->handle_string ('\''); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
737 return curr_lexer->count_token_internal (retval); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
738 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
739 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
740 return curr_lexer->count_token (QUOTE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
741 } |
967 | 742 } |
743 else | |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
744 { |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
745 if (! tok || tok == '[' || tok == '{' || tok == '(' |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
746 || curr_lexer->previous_token_is_binop () |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
747 || curr_lexer->previous_token_is_keyword ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
748 { |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
749 curr_lexer->current_input_column++; |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
750 int retval = curr_lexer->handle_string ('\''); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
751 return curr_lexer->count_token_internal (retval); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
752 } |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
753 else |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
754 return curr_lexer->count_token (QUOTE); |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
755 } |
967 | 756 } |
1 | 757 |
968 | 758 %{ |
971 | 759 // Double quotes always begin strings. |
760 %} | |
761 | |
973 | 762 \" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
763 curr_lexer->lexer_debug ("\""); |
8535 | 764 |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
765 int tok = curr_lexer->previous_token_value (); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
766 |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
767 bool transpose = false; |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
768 |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
769 if (curr_lexer->whitespace_is_significant ()) |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
770 { |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
771 if (curr_lexer->space_follows_previous_token ()) |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
772 { |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
773 if (tok == '[' || tok == '{' |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
774 || curr_lexer->previous_token_is_binop ()) |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
775 { |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
776 curr_lexer->current_input_column++; |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
777 int retval = curr_lexer->handle_string ('"'); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
778 return curr_lexer->count_token_internal (retval); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
779 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
780 else |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
781 { |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
782 yyless (0); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
783 curr_lexer->xunput (','); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
784 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
785 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
786 else |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
787 { |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
788 curr_lexer->current_input_column++; |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
789 int retval = curr_lexer->handle_string ('"'); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
790 return curr_lexer->count_token_internal (retval); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
791 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
792 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
793 else |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
794 { |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
795 curr_lexer->current_input_column++; |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
796 int retval = curr_lexer->handle_string ('"'); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
797 return curr_lexer->count_token_internal (retval); |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
798 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
799 } |
971 | 800 |
801 %{ | |
968 | 802 // Other operators. |
803 %} | |
804 | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
805 ":" { 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
|
806 ".+" { 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
|
807 ".-" { 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
|
808 ".*" { 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
|
809 "./" { 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
|
810 ".\\" { 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
|
811 ".^" { 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
|
812 ".**" { 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
|
813 "<=" { 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
|
814 "==" { 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
|
815 "~=" { 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
|
816 "!=" { 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
|
817 ">=" { 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
|
818 "&" { 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
|
819 "|" { 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
|
820 "<" { 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
|
821 ">" { 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
|
822 "*" { return curr_lexer->handle_op ("*", '*'); } |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
823 |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
824 "/" { |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
825 int prev_tok = curr_lexer->previous_token_value (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
826 bool space_before = curr_lexer->space_follows_previous_token (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
827 int c = curr_lexer->text_yyinput (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
828 curr_lexer->xunput (c); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
829 bool space_after = (c == ' ' || c == '\t'); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
830 |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
831 if (space_before && ! space_after |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
832 && curr_lexer->previous_token_may_be_command ()) |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
833 { |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
834 yyless (0); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
835 curr_lexer->push_start_state (COMMAND_START); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
836 } |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
837 else |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
838 return curr_lexer->handle_op ("/", '/'); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
839 } |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
840 |
16229
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 ("\\", LEFTDIV); } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
842 "^" { 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
|
843 "**" { 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
|
844 "&&" { 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
|
845 "||" { 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
|
846 "<<" { 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
|
847 ">>" { return curr_lexer->handle_incompatible_op (">>", RSHIFT); } |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
848 |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
849 ";" { |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
850 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
851 = (! (curr_lexer->whitespace_is_significant () |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
852 || curr_lexer->looking_at_object_index.front ())); |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
853 |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
854 return curr_lexer->handle_op (";", ';', true, at_beginning_of_statement); |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
855 } |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
856 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
857 "+" { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
858 int tok = curr_lexer->handle_unary_op ("+", '+'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
859 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
860 if (tok < 0) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
861 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
862 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
863 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
864 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
865 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
866 return tok; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
867 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
868 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
869 "-" { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
870 int prev_tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
871 bool space_before = curr_lexer->space_follows_previous_token (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
872 int c = curr_lexer->text_yyinput (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
873 curr_lexer->xunput (c); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
874 bool space_after = (c == ' ' || c == '\t'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
875 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
876 if (space_before && ! space_after |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
877 && curr_lexer->previous_token_may_be_command ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
878 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
879 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
880 curr_lexer->push_start_state (COMMAND_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
881 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
882 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
883 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
884 int tok = curr_lexer->handle_unary_op ("-", '-'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
885 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
886 if (tok < 0) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
887 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
888 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
889 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
890 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
891 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
892 return tok; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
893 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
894 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
895 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
896 "~" { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
897 int tok = curr_lexer->handle_unary_op ("~", EXPR_NOT); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
898 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
899 if (tok < 0) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
900 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
901 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
902 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
903 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
904 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
905 return tok; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
906 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
907 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
908 "!" { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
909 int tok = curr_lexer->handle_incompatible_unary_op ("!", EXPR_NOT); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
910 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
911 if (tok < 0) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
912 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
913 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
914 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
915 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
916 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
917 return tok; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
918 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
919 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
920 "," { |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
921 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
922 = (! (curr_lexer->whitespace_is_significant () |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
923 || curr_lexer->looking_at_object_index.front ())); |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
924 |
16229
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_op |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
926 (",", ',', true, at_beginning_of_statement); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
927 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
928 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
929 ".'" { |
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_op (".'", TRANSPOSE, true, false); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
931 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
932 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
933 "++" { |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
934 int tok = curr_lexer->handle_incompatible_unary_op |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
935 ("++", PLUS_PLUS, true, false, true); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
936 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
937 if (tok < 0) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
938 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
939 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
940 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
941 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
942 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
943 return tok; |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
944 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
945 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
946 "--" { |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
947 int tok = curr_lexer->handle_incompatible_unary_op |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
948 ("--", MINUS_MINUS, true, false, true); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
949 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
950 if (tok < 0) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
951 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
952 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
953 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
954 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
955 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
956 return tok; |
967 | 957 } |
1 | 958 |
967 | 959 "(" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
960 curr_lexer->lexer_debug ("("); |
8535 | 961 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
962 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
963 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
964 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
965 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
966 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
967 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
968 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
969 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
970 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
971 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
972 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
973 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
974 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
975 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
976 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
977 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
978 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
979 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
980 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
981 // If we are looking for an object index, then push TRUE for |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
982 // looking_at_object_index. Otherwise, just push whatever state |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
983 // is current (so that we can pop it off the stack when we find |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
984 // the matching close paren). |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
985 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
986 curr_lexer->looking_at_object_index.push_front |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
987 (curr_lexer->looking_for_object_index); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
988 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
989 curr_lexer->looking_at_indirect_ref = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
990 curr_lexer->looking_for_object_index = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
991 curr_lexer->at_beginning_of_statement = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
992 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
993 curr_lexer->nesting_level.paren (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
994 curr_lexer->decrement_promptflag (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
995 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
996 return curr_lexer->handle_token ('('); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
997 } |
967 | 998 } |
999 | |
1000 ")" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1001 curr_lexer->lexer_debug (")"); |
8535 | 1002 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1003 curr_lexer->nesting_level.remove (); |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1004 curr_lexer->current_input_column++; |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1005 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1006 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
|
1007 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1008 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
|
1009 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
|
1010 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1011 if (curr_lexer->looking_at_anon_fcn_args) |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1012 { |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1013 curr_lexer->looking_at_anon_fcn_args = false; |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1014 curr_lexer->nesting_level.anon_fcn_body (); |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1015 } |
13237
1bfca2bbea8b
fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents:
12801
diff
changeset
|
1016 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1017 return curr_lexer->count_token (')'); |
967 | 1018 } |
1019 | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1020 "." { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1021 curr_lexer->lexer_debug ("."); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1022 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1023 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
|
1024 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
|
1025 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1026 return curr_lexer->handle_token ('.'); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1027 } |
8535 | 1028 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1029 %{ |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1030 // = and op= operators. |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1031 %} |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1032 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1033 "=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1034 int tok = curr_lexer->handle_assign_op ("=", '='); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1035 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1036 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1037 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1038 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1039 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1040 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1041 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1042 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1043 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1044 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1045 "+=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1046 int tok = curr_lexer->handle_incompatible_assign_op ("+=", ADD_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1047 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1048 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1049 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1050 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1051 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1052 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1053 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1054 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1055 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1056 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1057 "-=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1058 int tok = curr_lexer->handle_incompatible_assign_op ("-=", SUB_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1059 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1060 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1061 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1062 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1063 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1064 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1065 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1066 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1067 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1068 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1069 "*=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1070 int tok = curr_lexer->handle_incompatible_assign_op ("*=", MUL_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1071 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1072 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1073 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1074 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1075 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1076 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1077 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1078 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1079 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1080 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1081 "/=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1082 int tok = curr_lexer->handle_incompatible_assign_op ("/=", DIV_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1083 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1084 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1085 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1086 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1087 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1088 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1089 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1090 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1091 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1092 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1093 "\\=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1094 int tok = curr_lexer->handle_incompatible_assign_op ("\\=", LEFTDIV_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1095 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1096 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1097 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1098 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1099 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1100 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1101 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1102 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1103 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1104 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1105 ".+=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1106 int tok = curr_lexer->handle_incompatible_assign_op (".+=", ADD_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1107 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1108 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1109 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1110 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1111 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1112 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1113 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1114 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1115 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1116 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1117 ".-=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1118 int tok = curr_lexer->handle_incompatible_assign_op (".-=", SUB_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1119 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1120 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1121 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1122 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1123 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1124 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1125 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1126 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1127 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1128 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1129 ".*=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1130 int tok = curr_lexer->handle_incompatible_assign_op (".*=", EMUL_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1131 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1132 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1133 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1134 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1135 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1136 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1137 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1138 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1139 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1140 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1141 "./=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1142 int tok = curr_lexer->handle_incompatible_assign_op ("./=", EDIV_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1143 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1144 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1145 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1146 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1147 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1148 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1149 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1150 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1151 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1152 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1153 ".\\=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1154 int tok = curr_lexer->handle_incompatible_assign_op (".\\=", ELEFTDIV_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1155 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1156 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1157 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1158 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1159 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1160 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1161 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1162 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1163 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1164 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1165 "^=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1166 int tok = curr_lexer->handle_incompatible_assign_op ("^=", POW_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1167 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1168 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1169 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1170 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1171 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1172 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1173 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1174 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1175 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1176 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1177 "**=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1178 int tok = curr_lexer->handle_incompatible_assign_op ("^=", POW_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1179 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1180 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1181 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1182 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1183 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1184 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1185 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1186 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1187 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1188 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1189 ".^=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1190 int tok = curr_lexer->handle_incompatible_assign_op (".^=", EPOW_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1191 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1192 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1193 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1194 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1195 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1196 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1197 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1198 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1199 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1200 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1201 ".**=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1202 int tok = curr_lexer->handle_incompatible_assign_op (".^=", EPOW_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1203 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1204 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1205 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1206 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1207 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1208 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1209 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1210 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1211 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1212 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1213 "&=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1214 int tok = curr_lexer->handle_incompatible_assign_op ("&=", AND_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1215 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1216 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1217 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1218 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1219 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1220 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1221 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1222 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1223 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1224 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1225 "|=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1226 int tok = curr_lexer->handle_incompatible_assign_op ("|=", OR_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1227 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1228 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1229 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1230 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1231 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1232 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1233 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1234 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1235 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1236 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1237 "<<=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1238 int tok = curr_lexer->handle_incompatible_assign_op ("<<=", LSHIFT_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1239 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1240 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1241 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1242 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1243 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1244 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1245 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1246 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1247 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1248 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1249 ">>=" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1250 int tok = curr_lexer->handle_incompatible_assign_op (">>=", RSHIFT_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1251 if (tok < 0) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1252 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1253 yyless (0); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1254 curr_lexer->xunput ('@'); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1255 curr_lexer->push_start_state (KLUGE); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1256 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1257 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1258 return tok; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1259 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1260 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1261 "{" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1262 curr_lexer->lexer_debug ("{"); |
8535 | 1263 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1264 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1265 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1266 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1267 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1268 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1269 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1270 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1271 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1272 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1273 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1274 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1275 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1276 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1277 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1278 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1279 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1280 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1281 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1282 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1283 curr_lexer->nesting_level.brace (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1284 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1285 curr_lexer->looking_at_object_index.push_front |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1286 (curr_lexer->looking_for_object_index); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1287 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1288 curr_lexer->current_input_column += yyleng; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1289 curr_lexer->looking_for_object_index = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1290 curr_lexer->at_beginning_of_statement = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1291 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1292 curr_lexer->decrement_promptflag (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1293 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1294 curr_lexer->braceflag++; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1295 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1296 curr_lexer->push_start_state (MATRIX_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1297 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1298 return curr_lexer->count_token ('{'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1299 } |
3351 | 1300 } |
1301 | |
1302 "}" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1303 curr_lexer->lexer_debug ("}"); |
8535 | 1304 |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1305 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
|
1306 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1307 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
|
1308 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
|
1309 |
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1310 curr_lexer->nesting_level.remove (); |
3351 | 1311 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1312 return curr_lexer->handle_token ('}'); |
3351 | 1313 } |
1314 | |
968 | 1315 %{ |
2066 | 1316 // Unrecognized input is a lexical error. |
968 | 1317 %} |
1 | 1318 |
2042 | 1319 . { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1320 curr_lexer->lexer_debug ("."); |
8535 | 1321 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1322 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
|
1323 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1324 int c = curr_lexer->text_yyinput (); |
4248 | 1325 |
1326 if (c != EOF) | |
4240 | 1327 { |
16110
7302f8a4df83
use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents:
16106
diff
changeset
|
1328 curr_lexer->current_input_column++; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1329 |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
1330 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
|
1331 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
|
1332 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
|
1333 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1334 return LEXICAL_ERROR; |
4240 | 1335 } |
1336 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
|
1337 return curr_lexer->handle_end_of_input (); |
2066 | 1338 } |
1 | 1339 |
1340 %% | |
1341 | |
8447
adab48231a03
make input_line_number work again
John W. Eaton <jwe@octave.org>
parents:
8312
diff
changeset
|
1342 static void |
8535 | 1343 display_character (char c) |
1344 { | |
1345 if (isgraph (c)) | |
1346 std::cerr << c; | |
1347 else | |
1348 switch (c) | |
1349 { | |
1350 case 0: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1351 std::cerr << "NUL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1352 break; |
8535 | 1353 |
1354 case 1: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1355 std::cerr << "SOH"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1356 break; |
8535 | 1357 |
1358 case 2: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1359 std::cerr << "STX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1360 break; |
8535 | 1361 |
1362 case 3: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1363 std::cerr << "ETX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1364 break; |
8535 | 1365 |
1366 case 4: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1367 std::cerr << "EOT"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1368 break; |
8535 | 1369 |
1370 case 5: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1371 std::cerr << "ENQ"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1372 break; |
8535 | 1373 |
1374 case 6: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1375 std::cerr << "ACK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1376 break; |
8535 | 1377 |
1378 case 7: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1379 std::cerr << "\\a"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1380 break; |
8535 | 1381 |
1382 case 8: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1383 std::cerr << "\\b"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1384 break; |
8535 | 1385 |
1386 case 9: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1387 std::cerr << "\\t"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1388 break; |
8535 | 1389 |
1390 case 10: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1391 std::cerr << "\\n"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1392 break; |
8535 | 1393 |
1394 case 11: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1395 std::cerr << "\\v"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1396 break; |
8535 | 1397 |
1398 case 12: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1399 std::cerr << "\\f"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1400 break; |
8535 | 1401 |
1402 case 13: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1403 std::cerr << "\\r"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1404 break; |
8535 | 1405 |
1406 case 14: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1407 std::cerr << "SO"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1408 break; |
8535 | 1409 |
1410 case 15: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1411 std::cerr << "SI"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1412 break; |
8535 | 1413 |
1414 case 16: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1415 std::cerr << "DLE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1416 break; |
8535 | 1417 |
1418 case 17: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1419 std::cerr << "DC1"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1420 break; |
8535 | 1421 |
1422 case 18: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1423 std::cerr << "DC2"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1424 break; |
8535 | 1425 |
1426 case 19: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1427 std::cerr << "DC3"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1428 break; |
8535 | 1429 |
1430 case 20: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1431 std::cerr << "DC4"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1432 break; |
8535 | 1433 |
1434 case 21: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1435 std::cerr << "NAK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1436 break; |
8535 | 1437 |
1438 case 22: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1439 std::cerr << "SYN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1440 break; |
8535 | 1441 |
1442 case 23: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1443 std::cerr << "ETB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1444 break; |
8535 | 1445 |
1446 case 24: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1447 std::cerr << "CAN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1448 break; |
8535 | 1449 |
1450 case 25: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1451 std::cerr << "EM"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1452 break; |
8535 | 1453 |
1454 case 26: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1455 std::cerr << "SUB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1456 break; |
8535 | 1457 |
1458 case 27: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1459 std::cerr << "ESC"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1460 break; |
8535 | 1461 |
1462 case 28: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1463 std::cerr << "FS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1464 break; |
8535 | 1465 |
1466 case 29: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1467 std::cerr << "GS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1468 break; |
8535 | 1469 |
1470 case 30: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1471 std::cerr << "RS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1472 break; |
8535 | 1473 |
1474 case 31: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1475 std::cerr << "US"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1476 break; |
8535 | 1477 |
1478 case 32: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1479 std::cerr << "SPACE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1480 break; |
8535 | 1481 |
1482 case 127: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1483 std::cerr << "DEL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1484 break; |
8535 | 1485 } |
1486 } | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1487 |
13973
2c664266e9d0
clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents:
13260
diff
changeset
|
1488 void |
2c664266e9d0
clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents:
13260
diff
changeset
|
1489 cleanup_parser (void) |
2c664266e9d0
clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents:
13260
diff
changeset
|
1490 { |
1 | 1491 } |
1492 | |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1493 // 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
|
1494 // string. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1495 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1496 static bool |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1497 match_any (char c, const char *s) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1498 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1499 char tmp; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1500 while ((tmp = *s++) != '\0') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1501 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1502 if (c == tmp) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1503 return true; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1504 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1505 return false; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1506 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1507 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1508 bool |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1509 is_keyword (const std::string& s) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1510 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1511 // Parsing function names like "set.property_name" inside |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1512 // 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
|
1513 // "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
|
1514 // 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
|
1515 // 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
|
1516 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1517 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
|
1518 && ! (s == "set" || s == "get")); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1519 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1520 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1521 DEFUN (iskeyword, args, , |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1522 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1523 @deftypefn {Built-in Function} {} iskeyword ()\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1524 @deftypefnx {Built-in Function} {} iskeyword (@var{name})\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1525 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
|
1526 is omitted, return a list of keywords.\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1527 @seealso{isvarname, exist}\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1528 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1529 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1530 octave_value retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1531 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1532 int argc = args.length () + 1; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1533 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1534 string_vector argv = args.make_argv ("iskeyword"); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1535 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1536 if (error_state) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1537 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1538 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1539 if (argc == 1) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1540 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1541 // 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
|
1542 // is_keyword function for additional details. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1543 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1544 string_vector lst (TOTAL_KEYWORDS); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1545 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1546 int j = 0; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1547 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1548 for (int i = 0; i < TOTAL_KEYWORDS; i++) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1549 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1550 std::string tmp = wordlist[i].name; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1551 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1552 if (! (tmp == "set" || tmp == "get")) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1553 lst[j++] = tmp; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1554 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1555 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1556 lst.resize (j); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1557 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1558 retval = Cell (lst.sort ()); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1559 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1560 else if (argc == 2) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1561 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1562 retval = is_keyword (argv[1]); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1563 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1564 else |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1565 print_usage (); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1566 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1567 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1568 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1569 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1570 /* |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1571 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1572 %!assert (iskeyword ("for")) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1573 %!assert (iskeyword ("fort"), false) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1574 %!assert (iskeyword ("fft"), false) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1575 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1576 */ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1577 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1578 // Used to delete trailing white space from tokens. |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1579 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1580 static std::string |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1581 strip_trailing_whitespace (char *s) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1582 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1583 std::string retval = s; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1584 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1585 size_t pos = retval.find_first_of (" \t"); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1586 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1587 if (pos != std::string::npos) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1588 retval.resize (pos); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1589 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1590 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1591 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1592 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1593 DEFUN (__display_tokens__, args, nargout, |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1594 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1595 @deftypefn {Built-in Function} {} __display_tokens__ ()\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1596 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
|
1597 lexer displays tokens as they are read.\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1598 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1599 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1600 return SET_INTERNAL_VARIABLE (display_tokens); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1601 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1602 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1603 DEFUN (__token_count__, , , |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1604 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1605 @deftypefn {Built-in Function} {} __token_count__ ()\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1606 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
|
1607 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1608 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1609 return octave_value (Vtoken_count); |
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 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1612 DEFUN (__lexer_debug_flag__, args, nargout, |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1613 "-*- texinfo -*-\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1614 @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
|
1615 Undocumented internal function.\n\ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1616 @end deftypefn") |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1617 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1618 octave_value retval; |
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 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
|
1621 "__lexer_debug_flag__"); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1622 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1623 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1624 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1625 |
16117
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1626 class |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1627 flex_stream_reader : public stream_reader |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1628 { |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1629 public: |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1630 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
|
1631 : 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
|
1632 { } |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1633 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1634 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
|
1635 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
|
1636 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1637 private: |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1638 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1639 // No copying! |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1640 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1641 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
|
1642 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1643 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
|
1644 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1645 octave_lexer *lexer; |
16117
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1646 |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1647 char *buf; |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1648 }; |
771186909285
maint: move class definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16116
diff
changeset
|
1649 |
16193
d7392bf42fd1
use inheritance to simplify initialization in octave_lexer constructor
John W. Eaton <jwe@octave.org>
parents:
16183
diff
changeset
|
1650 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
|
1651 { |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
1652 tokens.clear (); |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1653 } |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1654 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1655 void |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1656 lexical_feedback::init (void) |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1657 { |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1658 // 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
|
1659 // index. |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1660 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
|
1661 } |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1662 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1663 void |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1664 lexical_feedback::reset (void) |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1665 { |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1666 end_of_input = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1667 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
|
1668 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
|
1669 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
|
1670 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
|
1671 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
|
1672 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
|
1673 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
|
1674 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
|
1675 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
|
1676 parsing_class_method = false; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1677 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
|
1678 parsing_classdef = false; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1679 force_script = false; |
16199
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
1680 reading_fcn_file = false; |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
1681 reading_script_file = false; |
810a71122c25
move more global variables to octave_lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16195
diff
changeset
|
1682 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
|
1683 input_line_number = 1; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1684 current_input_column = 1; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1685 bracketflag = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1686 braceflag = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1687 looping = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1688 defining_func = 0; |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1689 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
|
1690 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
|
1691 token_count = 0; |
16207
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
1692 current_input_line = ""; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1693 comment_text = ""; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1694 help_text = ""; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1695 fcn_file_name = ""; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1696 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
|
1697 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
|
1698 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
|
1699 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1700 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
|
1701 parsed_function_name.pop (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1702 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1703 pending_local_variables.clear (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1704 |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1705 nesting_level.reset (); |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1706 |
16230
4bf907906134
use a queue to hold tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
16229
diff
changeset
|
1707 tokens.clear (); |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1708 } |
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1709 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1710 int |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1711 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
|
1712 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1713 const token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1714 return tok ? tok->token_value () : 0; |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1715 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1716 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1717 bool |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1718 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
|
1719 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1720 const token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1721 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
|
1722 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1723 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1724 void |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1725 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
|
1726 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1727 token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1728 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
|
1729 tok->mark_trailing_space (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1730 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1731 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1732 bool |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1733 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
|
1734 { |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1735 const token *tok = tokens.front (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1736 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
|
1737 } |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1738 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1739 bool |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1740 lexical_feedback::previous_token_is_binop (void) const |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1741 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1742 int tok = previous_token_value (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1743 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1744 return (tok == '+' || tok == '-' || tok == '@' |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1745 || tok == ',' || tok == ';' || tok == '*' || tok == '/' |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1746 || tok == ':' || tok == '=' || tok == ADD_EQ |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1747 || tok == AND_EQ || tok == DIV_EQ || tok == EDIV |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1748 || tok == EDIV_EQ || tok == ELEFTDIV || tok == ELEFTDIV_EQ |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1749 || tok == EMINUS || tok == EMUL || tok == EMUL_EQ |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1750 || tok == EPOW || tok == EPOW_EQ || tok == EXPR_AND |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1751 || tok == EXPR_AND_AND || tok == EXPR_EQ || tok == EXPR_GE |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1752 || tok == EXPR_GT || tok == EXPR_LE || tok == EXPR_LT |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1753 || tok == EXPR_NE || tok == EXPR_NOT || tok == EXPR_OR |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1754 || tok == EXPR_OR_OR || tok == LEFTDIV || tok == LEFTDIV_EQ |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1755 || tok == LSHIFT || tok == LSHIFT_EQ || tok == MUL_EQ |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1756 || tok == OR_EQ || tok == POW || tok == POW_EQ |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1757 || tok == RSHIFT || tok == RSHIFT_EQ || tok == SUB_EQ); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1758 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1759 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1760 bool |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1761 lexical_feedback::previous_token_is_keyword (void) const |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1762 { |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1763 const token *tok = tokens.front (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1764 return tok ? tok->is_keyword () : false; |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1765 } |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1766 |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1767 bool |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1768 lexical_feedback::previous_token_may_be_command (void) const |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1769 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1770 const token *tok = tokens.front (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1771 return tok ? tok->may_be_command () : false; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1772 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1773 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1774 static bool |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1775 looks_like_copyright (const std::string& s) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1776 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1777 bool retval = false; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1778 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1779 if (! s.empty ()) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1780 { |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1781 size_t offset = s.find_first_not_of (" \t"); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1782 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1783 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
|
1784 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1785 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1786 return retval; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1787 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
1788 |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1789 void |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1790 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
|
1791 { |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1792 buffer = input; |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1793 chars_left = buffer.length (); |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1794 pos = buffer.c_str (); |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1795 eof = eof_arg; |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1796 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1797 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1798 int |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1799 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
|
1800 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1801 static const char * const eol = "\n"; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1802 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1803 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
|
1804 assert (len > 0); |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1805 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1806 memcpy (buf, pos, len); |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1807 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1808 chars_left -= len; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1809 pos += len; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1810 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1811 // 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
|
1812 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
|
1813 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1814 if (len < max_size) |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1815 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1816 // 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
|
1817 // the buffer. |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1818 buf[len++] = '\n'; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1819 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1820 else |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1821 { |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1822 // 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
|
1823 // 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
|
1824 // call to octave_lexer::read. |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1825 pos = eol; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1826 chars_left = 1; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1827 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1828 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1829 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1830 return len; |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1831 } |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1832 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1833 octave_lexer::~octave_lexer (void) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1834 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1835 yylex_destroy (scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1836 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1837 |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1838 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1839 octave_lexer::init (void) |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1840 { |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1841 yylex_init (&scanner); |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1842 |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1843 // 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
|
1844 // flex-generated lexer. |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1845 yyset_extra (this, scanner); |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1846 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1847 clear_start_state (); |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1848 } |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1849 |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1850 // 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
|
1851 // 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
|
1852 // (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
|
1853 // 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
|
1854 // OCTAVE_YYG macro. |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1855 |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1856 #define OCTAVE_YYG \ |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1857 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
|
1858 |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1859 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1860 octave_lexer::reset (void) |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1861 { |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1862 // 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
|
1863 clear_start_state (); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1864 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1865 parser_symtab_context.clear (); |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1866 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1867 // 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
|
1868 promptflag (1); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1869 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1870 // 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
|
1871 // input. |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1872 |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1873 if (! quitting_gracefully |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1874 && (interactive || forced_interactive) |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1875 && ! (reading_fcn_file |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1876 || reading_classdef_file |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1877 || reading_script_file |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1878 || input_from_eval_string ())) |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1879 yyrestart (stdin, scanner); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1880 |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1881 input_reader.reset (); |
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
1882 |
16194
b7ca669af528
reset lexical_feedback state before starting a new parse
John W. Eaton <jwe@octave.org>
parents:
16193
diff
changeset
|
1883 lexical_feedback::reset (); |
16123
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1884 } |
a484e39d1f22
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16122
diff
changeset
|
1885 |
16124
3be725cd195b
move more lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16123
diff
changeset
|
1886 void |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1887 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
|
1888 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1889 reading_script_file = true; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
1890 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
1891 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
|
1892 } |
3be725cd195b
move more lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16123
diff
changeset
|
1893 |
16121
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1894 int |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1895 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
|
1896 { |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1897 int status = 0; |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1898 |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1899 if (input_buf.empty ()) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1900 { |
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1901 bool eof = false; |
16207
0467d68ca891
move current_input_line to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16203
diff
changeset
|
1902 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
|
1903 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
|
1904 } |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1905 |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1906 if (! input_buf.empty ()) |
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1907 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
|
1908 else |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1909 { |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1910 status = YY_NULL; |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1911 |
16183
359d56094efa
handle lexer input buffering with class
John W. Eaton <jwe@octave.org>
parents:
16166
diff
changeset
|
1912 if (! input_buf.at_eof ()) |
16195
b52d2f9294b6
use class for reading lexer input
John W. Eaton <jwe@octave.org>
parents:
16194
diff
changeset
|
1913 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
|
1914 } |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1915 |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1916 return status; |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1917 } |
bdf365c5c9bf
maint: move function definition in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16120
diff
changeset
|
1918 |
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
|
1919 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
|
1920 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
|
1921 { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1922 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
|
1923 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1924 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
|
1925 { |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1926 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
|
1927 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1928 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
|
1929 && ! 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
|
1930 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
|
1931 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
|
1932 } |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1933 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1934 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
|
1935 } |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1936 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1937 char * |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1938 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
|
1939 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1940 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
|
1941 } |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
1942 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
1943 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1944 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
|
1945 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1946 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
|
1947 } |
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
1948 |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1949 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1950 octave_lexer::text_yyinput (void) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1951 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1952 int c = yyinput (scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1953 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1954 if (lexer_debug_flag) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1955 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1956 std::cerr << "I: "; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1957 display_character (c); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1958 std::cerr << std::endl; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1959 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1960 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1961 // 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
|
1962 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1963 if (c == '\r') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1964 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
1965 c = yyinput (scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1966 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1967 if (lexer_debug_flag) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1968 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1969 std::cerr << "I: "; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1970 display_character (c); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1971 std::cerr << std::endl; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1972 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1973 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1974 if (c != '\n') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1975 { |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1976 xunput (c); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1977 c = '\n'; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1978 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1979 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1980 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1981 if (c == '\n') |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1982 input_line_number++; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1983 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1984 return c; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1985 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1986 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1987 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
1988 octave_lexer::xunput (char c, char *buf) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1989 { |
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
|
1990 if (c != EOF) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
1991 { |
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
|
1992 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
|
1993 { |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1994 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
|
1995 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
|
1996 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
|
1997 } |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1998 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1999 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
|
2000 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
|
2001 |
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
2002 yyunput (c, buf, scanner); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2003 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2004 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2005 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2006 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2007 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
|
2008 { |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2009 char *yytxt = flex_yytext (); |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
2010 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2011 xunput (c, yytxt); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2012 } |
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2013 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2014 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2015 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
|
2016 { |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2017 bool retval = false; |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2018 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2019 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
|
2020 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
|
2021 { |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2022 if (*i) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2023 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2024 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2025 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2026 } |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2027 } |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2028 |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2029 return retval; |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2030 } |
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2031 |
4238 | 2032 // Handle keywords. Return -1 if the keyword should be ignored. |
767 | 2033 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2034 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2035 octave_lexer::is_keyword_token (const std::string& s) |
1 | 2036 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2037 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
|
2038 int c = current_input_column; |
3805 | 2039 |
1823 | 2040 int len = s.length (); |
922 | 2041 |
5088 | 2042 const octave_kw *kw = octave_kw_hash::in_word_set (s.c_str (), len); |
191 | 2043 |
1497 | 2044 if (kw) |
143 | 2045 { |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
2046 token *tok_val = 0; |
1497 | 2047 |
2048 switch (kw->kw_id) | |
10315
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 case break_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2051 case catch_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2052 case continue_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2053 case else_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2054 case otherwise_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2055 case return_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2056 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
|
2057 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2058 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2059 |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2060 case static_kw: |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2061 if ((reading_fcn_file || reading_script_file |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2062 || reading_classdef_file) |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2063 && ! fcn_file_full_name.empty ()) |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2064 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
|
2065 "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
|
2066 input_line_number, |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2067 fcn_file_full_name.c_str ()); |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2068 else |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2069 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
|
2070 "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
|
2071 input_line_number); |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2072 // fall through ... |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2073 |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2074 case persistent_kw: |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
2075 case global_kw: |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
2076 looking_at_decl_list = true; |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2077 break; |
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14292
diff
changeset
|
2078 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2079 case case_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2080 case elseif_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2081 case until_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2082 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2083 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2084 case end_kw: |
14645
cbc00b587f36
also allow "end" indexing in classdef files
John W. Eaton <jwe@octave.org>
parents:
14642
diff
changeset
|
2085 if (inside_any_object_index () |
cbc00b587f36
also allow "end" indexing in classdef files
John W. Eaton <jwe@octave.org>
parents:
14642
diff
changeset
|
2086 || (! reading_classdef_file |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2087 && (defining_func |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2088 && ! (looking_at_return_list |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2089 || parsed_function_name.top ())))) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2090 return 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2091 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2092 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
|
2093 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2094 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2095 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2096 case end_try_catch_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2097 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
|
2098 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2099 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2100 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2101 case end_unwind_protect_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2102 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
|
2103 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
|
2104 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2105 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2106 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2107 case endfor_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2108 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
|
2109 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2110 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2111 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2112 case endfunction_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2113 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
|
2114 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2115 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2116 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2117 case endif_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2118 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
|
2119 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2120 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2121 |
13246 | 2122 case endparfor_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2123 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
|
2124 at_beginning_of_statement = true; |
13246 | 2125 break; |
2126 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2127 case endswitch_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2128 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
|
2129 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2130 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2131 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2132 case endwhile_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2133 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
|
2134 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2135 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2136 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2137 case endclassdef_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2138 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
|
2139 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2140 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2141 |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
2142 case endenumeration_kw: |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
2143 tok_val = new token (endenumeration_kw, token::enumeration_end, l, c); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2144 at_beginning_of_statement = true; |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
2145 break; |
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
2146 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2147 case endevents_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2148 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
|
2149 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2150 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2151 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2152 case endmethods_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2153 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
|
2154 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2155 break; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2156 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2157 case endproperties_kw: |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2158 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
|
2159 at_beginning_of_statement = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2160 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2161 |
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
|
2162 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2163 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
|
2164 case parfor_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2165 case while_kw: |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
2166 decrement_promptflag (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2167 looping++; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2168 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2169 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2170 case do_kw: |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2171 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
|
2172 decrement_promptflag (); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2173 looping++; |
10315
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 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2176 case try_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2177 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
|
2178 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
|
2179 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2180 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2181 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2182 case if_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2183 case switch_kw: |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
2184 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2185 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2186 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2187 case get_kw: |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2188 case set_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2189 // 'get' and 'set' are keywords in classdef method |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2190 // declarations. |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2191 if (! maybe_classdef_get_set_method) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2192 return 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2193 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2194 |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
2195 case enumeration_kw: |
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
2196 case events_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2197 case methods_kw: |
13249
7861a5fd3479
accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents:
13246
diff
changeset
|
2198 case properties_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2199 // 'properties', 'methods' and 'events' are keywords for |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2200 // classdef blocks. |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2201 if (! parsing_classdef) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2202 return 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2203 // fall through ... |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2204 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2205 case classdef_kw: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2206 // '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
|
2207 decrement_promptflag (); |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2208 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2209 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
|
2210 { |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2211 reading_classdef_file = true; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2212 reading_script_file = false; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2213 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2214 break; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2215 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2216 case function_kw: |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
2217 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2218 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2219 defining_func++; |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2220 parsed_function_name.push (false); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2221 |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2222 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
|
2223 { |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2224 reading_fcn_file = true; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2225 reading_script_file = false; |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2226 } |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2227 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2228 if (! (reading_fcn_file || reading_script_file |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2229 || reading_classdef_file)) |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2230 input_line_number = 1; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2231 break; |
1497 | 2232 |
3174 | 2233 case magic_file_kw: |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2234 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2235 if ((reading_fcn_file || reading_script_file |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2236 || reading_classdef_file) |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
2237 && ! fcn_file_full_name.empty ()) |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
2238 tok_val = new token (magic_file_kw, true, |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
2239 fcn_file_full_name, l, c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2240 else |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2241 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
|
2242 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2243 break; |
3174 | 2244 |
2245 case magic_line_kw: | |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2246 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
|
2247 "", l, c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2248 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2249 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2250 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2251 panic_impossible (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2252 } |
1497 | 2253 |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
2254 if (! tok_val) |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
2255 tok_val = new token (kw->tok, true, 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
|
2256 |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
2257 push_token (tok_val); |
1497 | 2258 |
2259 return kw->tok; | |
143 | 2260 } |
1 | 2261 |
2262 return 0; | |
2263 } | |
2264 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2265 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2266 octave_lexer::is_variable (const std::string& name) |
2702 | 2267 { |
8001
ff9e7873f8ea
improve handling of command-style names in matrix_or_assign_lhs context
John W. Eaton <jwe@octave.org>
parents:
7898
diff
changeset
|
2268 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
|
2269 || (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
|
2270 != pending_local_variables.end ())); |
2702 | 2271 } |
2272 | |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2273 bool |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2274 octave_lexer::whitespace_is_significant (void) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2275 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2276 return (nesting_level.is_bracket () |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2277 || (nesting_level.is_brace () |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2278 && ! looking_at_object_index.front ())); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2279 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2280 |
3220 | 2281 static inline bool |
2282 looks_like_hex (const char *s, int len) | |
2283 { | |
2284 return (len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')); | |
2285 } | |
2286 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2287 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2288 octave_lexer::handle_number (void) |
972 | 2289 { |
3220 | 2290 double value = 0.0; |
2291 int nread = 0; | |
2292 | |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2293 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2294 |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2295 if (looks_like_hex (yytxt, strlen (yytxt))) |
3220 | 2296 { |
2297 unsigned long ival; | |
3598 | 2298 |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2299 nread = sscanf (yytxt, "%lx", &ival); |
3598 | 2300 |
3220 | 2301 value = static_cast<double> (ival); |
2302 } | |
2303 else | |
3598 | 2304 { |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2305 char *tmp = strsave (yytxt); |
3598 | 2306 |
2307 char *idx = strpbrk (tmp, "Dd"); | |
2621 | 2308 |
3598 | 2309 if (idx) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2310 *idx = 'e'; |
3598 | 2311 |
2312 nread = sscanf (tmp, "%lf", &value); | |
2313 | |
2314 delete [] tmp; | |
2315 } | |
972 | 2316 |
1826 | 2317 // If yytext doesn't contain a valid number, we are in deep doo doo. |
985 | 2318 |
972 | 2319 assert (nread == 1); |
2320 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2321 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
|
2322 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
|
2323 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2324 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
|
2325 current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2326 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
2327 current_input_column += flex_yyleng (); |
972 | 2328 } |
2329 | |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2330 void |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2331 octave_lexer::handle_continuation (void) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2332 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2333 char *yytxt = flex_yytext (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2334 int yylng = flex_yyleng (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2335 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2336 int offset = 1; |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2337 if (yytxt[0] == '\\') |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2338 gripe_matlab_incompatible_continuation (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2339 else |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2340 offset = 3; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2341 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2342 bool have_space = false; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2343 while (offset < yylng) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2344 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2345 char c = yytxt[offset]; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2346 if (c == ' ' || c == '\t') |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2347 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2348 have_space = true; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2349 offset++; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2350 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2351 else |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2352 break; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2353 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2354 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2355 if (have_space) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2356 mark_previous_token_trailing_space (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2357 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2358 bool have_comment = 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 == '%') |
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_comment = 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 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2371 if (have_comment) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2372 { |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2373 comment_text = &yytxt[offset]; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2374 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2375 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
|
2376 } |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2377 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2378 decrement_promptflag (); |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2379 input_line_number++; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2380 current_input_column = 1; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2381 } |
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 void |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2384 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
|
2385 bool looking_at_continuation) |
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 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
|
2388 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2389 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
|
2390 && ! comment_text.empty () && ! copyright) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2391 help_text = comment_text; |
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 if (copyright) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2394 typ = octave_comment_elt::copyright; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2395 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2396 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
|
2397 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2398 comment_text = ""; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2399 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2400 at_beginning_of_statement = true; |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2401 |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2402 if (! looking_at_continuation) |
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
2403 xunput ('\n'); |
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 |
1001 | 2406 // We have seen a backslash and need to find out if it should be |
2407 // treated as a continuation character. If so, this eats it, up to | |
2408 // and including the new line character. | |
2409 // | |
973 | 2410 // Match whitespace only, followed by a comment character or newline. |
2411 // Once a comment character is found, discard all input until newline. | |
2412 // If non-whitespace characters are found before comment | |
2413 // characters, return 0. Otherwise, return 1. | |
2414 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
2415 // 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
|
2416 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2417 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2418 octave_lexer::have_continuation (bool trailing_comments_ok) |
973 | 2419 { |
5765 | 2420 std::ostringstream buf; |
973 | 2421 |
3665 | 2422 std::string comment_buf; |
2423 | |
2857 | 2424 bool in_comment = false; |
3665 | 2425 bool beginning_of_comment = false; |
2426 | |
2427 int c = 0; | |
2428 | |
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
|
2429 while ((c = text_yyinput ()) != EOF) |
973 | 2430 { |
3802 | 2431 buf << static_cast<char> (c); |
973 | 2432 |
2433 switch (c) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2434 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2435 case ' ': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2436 case '\t': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2437 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2438 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2439 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2440 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2441 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2442 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2443 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2444 case '%': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2445 case '#': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2446 if (trailing_comments_ok) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2447 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2448 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2449 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2450 if (! beginning_of_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2451 comment_buf += static_cast<char> (c); |
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 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2454 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2455 maybe_gripe_matlab_incompatible_comment (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2456 in_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2457 beginning_of_comment = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2458 } |
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 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2461 goto cleanup; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2462 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2463 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2464 case '\n': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2465 if (in_comment) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2466 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2467 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2468 octave_comment_buffer::append (comment_buf); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2469 } |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2470 current_input_column = 0; |
16209
e7ff32e7cf82
move global promptflag variable to octave_reader class
John W. Eaton <jwe@octave.org>
parents:
16207
diff
changeset
|
2471 decrement_promptflag (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2472 gripe_matlab_incompatible_continuation (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2473 return true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2474 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2475 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2476 if (in_comment) |
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 comment_buf += static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2479 beginning_of_comment = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2480 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2481 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2482 goto cleanup; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2483 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2484 } |
973 | 2485 } |
2486 | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2487 xunput (c); |
2857 | 2488 return false; |
973 | 2489 |
3096 | 2490 cleanup: |
4051 | 2491 |
5765 | 2492 std::string s = buf.str (); |
4051 | 2493 |
2494 int len = s.length (); | |
2495 while (len--) | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2496 xunput (s[len]); |
3096 | 2497 |
2857 | 2498 return false; |
973 | 2499 } |
2500 | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
2501 // We have seen a '.' and need to see if it is the start of a |
1001 | 2502 // continuation. If so, this eats it, up to and including the new |
2503 // line character. | |
2504 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2505 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2506 octave_lexer::have_ellipsis_continuation (bool trailing_comments_ok) |
973 | 2507 { |
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
|
2508 char c1 = text_yyinput (); |
973 | 2509 if (c1 == '.') |
2510 { | |
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
|
2511 char c2 = text_yyinput (); |
1091 | 2512 if (c2 == '.' && have_continuation (trailing_comments_ok)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2513 return true; |
973 | 2514 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2515 { |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2516 xunput (c2); |
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2517 xunput (c1); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2518 } |
973 | 2519 } |
2520 else | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2521 xunput (c1); |
973 | 2522 |
2857 | 2523 return false; |
973 | 2524 } |
2525 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2526 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2527 octave_lexer::handle_string (char delim) |
973 | 2528 { |
5765 | 2529 std::ostringstream buf; |
973 | 2530 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2531 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
|
2532 int bos_col = current_input_column; |
3805 | 2533 |
973 | 2534 int c; |
1031 | 2535 int escape_pending = 0; |
973 | 2536 |
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
|
2537 while ((c = text_yyinput ()) != EOF) |
973 | 2538 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2539 current_input_column++; |
973 | 2540 |
3105 | 2541 if (c == '\\') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2542 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2543 if (delim == '\'' || escape_pending) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2544 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2545 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2546 escape_pending = 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2547 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2548 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2549 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2550 if (have_continuation (false)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2551 escape_pending = 0; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2552 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2553 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2554 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2555 escape_pending = 1; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2556 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2557 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2558 continue; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2559 } |
973 | 2560 else if (c == '.') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2561 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2562 if (delim == '\'' || ! have_ellipsis_continuation (false)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2563 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2564 } |
973 | 2565 else if (c == '\n') |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2566 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2567 error ("unterminated string constant"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2568 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2569 } |
973 | 2570 else if (c == delim) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2571 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2572 if (escape_pending) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2573 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2574 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2575 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2576 c = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2577 if (c == delim) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2578 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2579 buf << static_cast<char> (c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2580 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2581 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2582 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2583 std::string s; |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2584 xunput (c); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2585 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2586 if (delim == '\'') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2587 s = buf.str (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2588 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2589 s = do_string_escapes (buf.str ()); |
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 if (delim == '"') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2592 gripe_matlab_incompatible ("\" used as string delimiter"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2593 else if (delim == '\'') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2594 gripe_single_quote_string (); |
3400 | 2595 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2596 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
|
2597 at_beginning_of_statement = false; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2598 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2599 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
|
2600 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2601 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
|
2602 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2603 return tok; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2604 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2605 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2606 } |
973 | 2607 else |
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 buf << static_cast<char> (c); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2610 } |
973 | 2611 |
1031 | 2612 escape_pending = 0; |
973 | 2613 } |
2614 | |
2615 return LEXICAL_ERROR; | |
2616 } | |
2617 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2618 int |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
2619 octave_lexer::handle_close_bracket (int bracket_type) |
971 | 2620 { |
4612 | 2621 int retval = bracket_type; |
3208 | 2622 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2623 if (! nesting_level.none ()) |
971 | 2624 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2625 nesting_level.remove (); |
4613 | 2626 |
2627 if (bracket_type == ']') | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2628 bracketflag--; |
4613 | 2629 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
|
2630 braceflag--; |
4613 | 2631 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2632 panic_impossible (); |
971 | 2633 } |
2634 | |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
2635 pop_start_state (); |
1001 | 2636 |
3208 | 2637 return retval; |
971 | 2638 } |
2639 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2640 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2641 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
|
2642 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2643 std::stack<char> buf; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2644 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2645 int c = EOF; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2646 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2647 // Skip whitespace in current statement on current line |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2648 while (true) |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2649 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2650 c = text_yyinput (); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2651 |
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
|
2652 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
|
2653 |
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
|
2654 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
|
2655 break; |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2656 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2657 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2658 // Restore input. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2659 while (! buf.empty ()) |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2660 { |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2661 xunput (buf.top ()); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2662 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2663 buf.pop (); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2664 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2665 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2666 return (isalnum (c) || match_any (c, "!\"'(-[_{~")); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2667 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2668 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2669 bool |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2670 octave_lexer::looks_like_command_arg (void) |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2671 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2672 bool retval = true; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2673 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2674 int c0 = text_yyinput (); |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2675 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2676 switch (c0) |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2677 { |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2678 // = == |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2679 case '=': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2680 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2681 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2682 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2683 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2684 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2685 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2686 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2687 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2688 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2689 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2690 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2691 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2692 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2693 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2694 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2695 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2696 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2697 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2698 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2699 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2700 case '(': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2701 case '{': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2702 // Indexing. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2703 retval = false; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2704 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2705 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2706 case '\n': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2707 // EOL. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2708 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2709 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2710 case '\'': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2711 case '"': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2712 // Beginning of a character string. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2713 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2714 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2715 // + - ++ -- += -= |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2716 case '+': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2717 case '-': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2718 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2719 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2720 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2721 switch (c1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2722 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2723 case '\n': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2724 // EOL. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2725 case '+': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2726 case '-': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2727 // Unary ops, spacing doesn't matter. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2728 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2729 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2730 case '\t': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2731 case ' ': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2732 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2733 if (next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2734 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2735 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2736 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2737 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2738 case '=': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2739 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2740 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2741 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2742 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2743 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2744 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2745 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2746 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2747 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2748 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2749 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2750 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2751 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2752 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2753 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2754 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2755 case ':': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2756 case '/': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2757 case '\\': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2758 case '^': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2759 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2760 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2761 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2762 if (! match_any (c1, ",;\n") && (c1 == ' ' || c1 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2763 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2764 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2765 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2766 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2767 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2768 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2769 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2770 // .+ .- ./ .\ .^ .* .** |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2771 case '.': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2772 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2773 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2774 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2775 if (match_any (c1, "+-/\\^*")) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2776 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2777 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2778 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2779 if (c2 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2780 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2781 int c3 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2782 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2783 if (! match_any (c3, ",;\n") && (c3 == ' ' || c3 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2784 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2785 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2786 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2787 xunput (c3); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2788 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2789 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
|
2790 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2791 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2792 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2793 xunput (c2); |
10315
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 else if (! match_any (c1, ",;\n") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2796 && (! isdigit (c1) && c1 != ' ' && c1 != '\t' |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2797 && c1 != '.')) |
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 // Structure reference. FIXME -- is this a complete check? |
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 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2802 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2803 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2804 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2805 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2806 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2807 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2808 // & && | || * ** |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2809 case '&': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2810 case '|': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2811 case '*': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2812 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2813 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2814 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2815 if (c1 == c0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2816 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2817 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2818 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2819 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2820 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2821 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2822 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2823 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2824 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2825 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
|
2826 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2827 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2828 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2829 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2830 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2831 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2832 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2833 // < <= > >= |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2834 case '<': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2835 case '>': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2836 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2837 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2838 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2839 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2840 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2841 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2842 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2843 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2844 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2845 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2846 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2847 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2848 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2849 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
|
2850 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2851 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2852 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2853 xunput (c1); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2854 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2855 break; |
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 // ~= != |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2858 case '~': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2859 case '!': |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2860 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2861 int c1 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2862 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2863 // ~ and ! can be unary ops, so require following =. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2864 if (c1 == '=') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2865 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2866 int c2 = text_yyinput (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2867 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2868 if (! match_any (c2, ",;\n") && (c2 == ' ' || c2 == '\t') |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2869 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2870 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2871 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2872 xunput (c2); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2873 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2874 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
|
2875 && next_token_can_follow_bin_op ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2876 retval = false; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2877 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2878 xunput (c1); |
8746
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 break; |
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 default: |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2883 break; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2884 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2885 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
2886 xunput (c0); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2887 |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2888 return retval; |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2889 } |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2890 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2891 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2892 octave_lexer::handle_superclass_identifier (void) |
9476 | 2893 { |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2894 std::string pkg; |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2895 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2896 std::string meth = strip_trailing_whitespace (yytxt); |
9476 | 2897 size_t pos = meth.find ("@"); |
2898 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
|
2899 meth = meth.substr (0, pos - 1); |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2900 |
9476 | 2901 pos = cls.find ("."); |
2902 if (pos != std::string::npos) | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2903 { |
9476 | 2904 pkg = cls.substr (pos).substr (1); |
2905 cls = cls.substr (0, pos - 1); | |
2906 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2907 |
9476 | 2908 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
|
2909 || is_keyword_token (pkg)); |
9476 | 2910 if (kw_token) |
2911 { | |
2912 error ("method, class and package names may not be keywords"); | |
2913 return LEXICAL_ERROR; | |
2914 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2915 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2916 push_token (new token (SUPERCLASSREF, |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2917 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
|
2918 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
|
2919 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
|
2920 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
|
2921 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
2922 current_input_column += flex_yyleng (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2923 |
9476 | 2924 return SUPERCLASSREF; |
2925 } | |
2926 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2927 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2928 octave_lexer::handle_meta_identifier (void) |
9476 | 2929 { |
2930 std::string pkg; | |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2931 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2932 std::string cls = strip_trailing_whitespace (yytxt).substr (1); |
9476 | 2933 size_t pos = cls.find ("."); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2934 |
9476 | 2935 if (pos != std::string::npos) |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2936 { |
9476 | 2937 pkg = cls.substr (pos).substr (1); |
2938 cls = cls.substr (0, pos - 1); | |
2939 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2940 |
9476 | 2941 int kw_token = is_keyword_token (cls) || is_keyword_token (pkg); |
2942 if (kw_token) | |
2943 { | |
2944 error ("class and package names may not be keywords"); | |
2945 return LEXICAL_ERROR; | |
2946 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2947 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2948 push_token (new token (METAQUERY, |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2949 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
|
2950 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
|
2951 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
|
2952 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
2953 current_input_column += flex_yyleng (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2954 |
9476 | 2955 return METAQUERY; |
2956 } | |
2957 | |
767 | 2958 // Figure out exactly what kind of token to return when we have seen |
4238 | 2959 // an identifier. Handles keywords. Return -1 if the identifier |
2960 // should be ignored. | |
767 | 2961 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2962 int |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
2963 octave_lexer::handle_identifier (void) |
146 | 2964 { |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2965 char *yytxt = flex_yytext (); |
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2966 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2967 std::string tok = yytxt; |
16128
210039e91ad6
localize use of yytext with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16126
diff
changeset
|
2968 |
2970 | 2969 // If we are expecting a structure element, avoid recognizing |
2970 // keywords and other special names and return STRUCT_ELT, which is | |
2971 // a string that is also a valid identifier. But first, we have to | |
2972 // decide whether to insert a comma. | |
747 | 2973 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2974 if (looking_at_indirect_ref) |
1072 | 2975 { |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2976 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
|
2977 current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2978 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
2979 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
|
2980 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
2981 current_input_column += flex_yyleng (); |
2819 | 2982 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2983 at_beginning_of_statement = false; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2984 |
2970 | 2985 return STRUCT_ELT; |
1072 | 2986 } |
747 | 2987 |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2988 // 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
|
2989 // 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
|
2990 // 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
|
2991 // statement. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2992 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2993 // May set begenning_of_statement to true. |
4930 | 2994 int kw_token = is_keyword_token (tok); |
2995 | |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2996 // 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
|
2997 // 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
|
2998 // statement. |
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
2999 |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3000 if (looking_at_function_handle) |
4930 | 3001 { |
3002 if (kw_token) | |
10315
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 error ("function handles may not refer to keywords"); |
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 return LEXICAL_ERROR; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3007 } |
4930 | 3008 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3009 { |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3010 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
|
3011 current_input_column)); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3012 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3013 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
|
3014 looking_for_object_index = true; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3015 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3016 at_beginning_of_statement = false; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3017 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3018 return FCN_HANDLE; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3019 } |
4930 | 3020 } |
3021 | |
5102 | 3022 // 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
|
3023 // Keywords can be followed by identifiers. |
146 | 3024 |
3025 if (kw_token) | |
3026 { | |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
3027 if (kw_token >= 0) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3028 { |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3029 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
|
3030 looking_for_object_index = false; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3031 } |
7722
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
3032 |
c3bb0b7a4261
lex.l: allow tokens to be displayed when parsed
John W. Eaton <jwe@octave.org>
parents:
7720
diff
changeset
|
3033 return kw_token; |
146 | 3034 } |
3035 | |
1826 | 3036 // See if we have a plot keyword (title, using, with, or clear). |
146 | 3037 |
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
|
3038 int c1 = text_yyinput (); |
3480 | 3039 |
3040 bool next_tok_is_eq = false; | |
3041 if (c1 == '=') | |
3042 { | |
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
|
3043 int c2 = text_yyinput (); |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3044 xunput (c2); |
3480 | 3045 |
3046 if (c2 != '=') | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3047 next_tok_is_eq = true; |
3480 | 3048 } |
3049 | |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
3050 xunput (c1); |
1001 | 3051 |
2702 | 3052 // Kluge alert. |
3053 // | |
3054 // If we are looking at a text style function, set up to gobble its | |
2745 | 3055 // arguments. |
3056 // | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
3057 // If the following token is '=', or if we are parsing a function |
3189 | 3058 // return list or function parameter list, or if we are looking at |
3059 // something like [ab,cd] = foo (), force the symbol to be inserted | |
3060 // as a variable in the current symbol table. | |
2702 | 3061 |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
3062 if (! is_variable (tok)) |
2702 | 3063 { |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3064 if (next_tok_is_eq |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3065 || looking_at_decl_list |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3066 || looking_at_return_list |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3067 || (looking_at_parameter_list |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3068 && ! looking_at_initializer_expression)) |
10315
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 symbol_table::force_variable (tok); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3071 } |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3072 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
|
3073 { |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3074 pending_local_variables.insert (tok); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3075 } |
2702 | 3076 } |
3077 | |
4234 | 3078 // Find the token in the symbol table. Beware the magic |
3079 // transformation of the end keyword... | |
3080 | |
3081 if (tok == "end") | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
3082 tok = "__end__"; |
146 | 3083 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3084 token *tok_val = new token (NAME, &(symbol_table::insert (tok)), |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3085 input_line_number, current_input_column); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3086 |
16269
488b0fef52c5
7/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
3087 if (at_beginning_of_statement |
488b0fef52c5
7/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
3088 && (! (tok == "e" |
488b0fef52c5
7/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
3089 || tok == "I" || tok == "i" |
488b0fef52c5
7/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
3090 || tok == "J" || tok == "j" |
488b0fef52c5
7/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
3091 || tok == "Inf" || tok == "inf" |
488b0fef52c5
7/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16267
diff
changeset
|
3092 || tok == "NaN" || tok == "nan"))) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3093 tok_val->mark_may_be_command (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3094 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3095 push_token (tok_val); |
146 | 3096 |
16130
421dea028bbf
localize use of yyleng with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16129
diff
changeset
|
3097 current_input_column += flex_yyleng (); |
146 | 3098 |
9324
29563379fa9b
don't look for object index after keyword
John W. Eaton <jwe@octave.org>
parents:
8974
diff
changeset
|
3099 if (tok != "__end__") |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3100 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
|
3101 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3102 at_beginning_of_statement = false; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3103 |
146 | 3104 return NAME; |
3105 } | |
3106 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3107 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3108 octave_lexer::maybe_warn_separator_insert (char sep) |
3388 | 3109 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3110 std::string nm = fcn_file_full_name; |
3388 | 3111 |
5794 | 3112 if (nm.empty ()) |
3113 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
|
3114 "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
|
3115 sep, input_line_number); |
5794 | 3116 else |
3117 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
|
3118 "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
|
3119 sep, input_line_number, nm.c_str ()); |
3388 | 3120 } |
3121 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3122 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3123 octave_lexer::gripe_single_quote_string (void) |
3400 | 3124 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3125 std::string nm = fcn_file_full_name; |
3400 | 3126 |
5794 | 3127 if (nm.empty ()) |
3128 warning_with_id ("Octave:single-quote-string", | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3129 "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
|
3130 input_line_number); |
5794 | 3131 else |
3132 warning_with_id ("Octave:single-quote-string", | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3133 "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
|
3134 input_line_number, nm.c_str ()); |
3400 | 3135 } |
3136 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3137 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3138 octave_lexer::gripe_matlab_incompatible (const std::string& msg) |
4037 | 3139 { |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3140 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
|
3141 |
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3142 if (nm.empty ()) |
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3143 warning_with_id ("Octave:matlab-incompatible", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3144 "potential Matlab compatibility problem: %s", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3145 msg.c_str ()); |
8974
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3146 else |
fde2a916b2ac
include line and file info in parser warnings
John W. Eaton <jwe@octave.org>
parents:
8950
diff
changeset
|
3147 warning_with_id ("Octave:matlab-incompatible", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
3148 "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
|
3149 msg.c_str (), input_line_number, nm.c_str ()); |
4037 | 3150 } |
3151 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3152 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3153 octave_lexer::maybe_gripe_matlab_incompatible_comment (char c) |
4037 | 3154 { |
3155 if (c == '#') | |
3156 gripe_matlab_incompatible ("# used as comment character"); | |
3157 } | |
3158 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3159 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3160 octave_lexer::gripe_matlab_incompatible_continuation (void) |
4037 | 3161 { |
3162 gripe_matlab_incompatible ("\\ used as line continuation marker"); | |
3163 } | |
3164 | |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
3165 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3166 octave_lexer::gripe_matlab_incompatible_operator (const std::string& op) |
4037 | 3167 { |
3168 std::string t = op; | |
3169 int n = t.length (); | |
3170 if (t[n-1] == '\n') | |
3171 t.resize (n-1); | |
3172 gripe_matlab_incompatible (t + " used as operator"); | |
3173 } | |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3174 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3175 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3176 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
|
3177 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3178 YYSTYPE *lval = yyget_lval (scanner); |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3179 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
|
3180 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
|
3181 } |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3182 |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3183 token * |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3184 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
|
3185 { |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3186 YYSTYPE *lval = yyget_lval (scanner); |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3187 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
|
3188 } |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3189 |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3190 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3191 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
|
3192 { |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3193 switch (tok) |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3194 { |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3195 case '=': std::cerr << "'='\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3196 case ':': std::cerr << "':'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3197 case '-': std::cerr << "'-'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3198 case '+': std::cerr << "'+'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3199 case '*': std::cerr << "'*'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3200 case '/': std::cerr << "'/'\n"; break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3201 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
|
3202 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
|
3203 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
|
3204 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
|
3205 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
|
3206 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
|
3207 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
|
3208 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
|
3209 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
|
3210 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
|
3211 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
|
3212 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
|
3213 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
|
3214 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
|
3215 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
|
3216 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
|
3217 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
|
3218 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
|
3219 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
|
3220 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
|
3221 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
|
3222 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
|
3223 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
|
3224 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
|
3225 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
|
3226 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
|
3227 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
|
3228 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
|
3229 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
|
3230 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
|
3231 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
|
3232 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
|
3233 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
|
3234 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
|
3235 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
|
3236 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
|
3237 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
|
3238 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
|
3239 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
|
3240 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3241 case NUM: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3242 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
|
3243 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3244 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
|
3245 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
|
3246 << " [" << 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
|
3247 } |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3248 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3249 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3250 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
|
3251 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3252 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
|
3253 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
|
3254 } |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3255 break; |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3256 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3257 case NAME: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3258 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3259 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
|
3260 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
|
3261 std::cerr << "NAME"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3262 if (sr) |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3263 std::cerr << " [" << sr->name () << "]"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3264 std::cerr << "\n"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3265 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3266 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3267 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3268 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
|
3269 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3270 case DQ_STRING: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3271 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
|
3272 { |
16148
10abbc493f50
delete unnecessary X-> references inside class X member functions
John W. Eaton <jwe@octave.org>
parents:
16146
diff
changeset
|
3273 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
|
3274 |
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3275 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
|
3276 << " [" << 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
|
3277 } |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3278 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3279 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3280 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
|
3281 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
|
3282 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
|
3283 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
|
3284 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
|
3285 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
|
3286 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
|
3287 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
|
3288 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
|
3289 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
|
3290 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
|
3291 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
|
3292 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
|
3293 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
|
3294 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
|
3295 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
|
3296 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
|
3297 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
|
3298 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
|
3299 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
|
3300 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
|
3301 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
|
3302 case FCN: std::cerr << "FCN\n"; break; |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3303 case CHOOSE_ASSIGNMENT: std::cerr << "CHOOSE_ASSIGNMENT\n"; break; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
3304 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
|
3305 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
|
3306 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
|
3307 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
|
3308 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
|
3309 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
|
3310 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
|
3311 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
|
3312 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
|
3313 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
|
3314 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
|
3315 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
|
3316 default: |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3317 { |
16166
cb80b1d062b1
don't attempt to print unprintable tokens
John W. Eaton <jwe@octave.org>
parents:
16164
diff
changeset
|
3318 if (tok < 256 && tok > 31) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3319 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
|
3320 else |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3321 std::cerr << "UNKNOWN(" << tok << ")\n"; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3322 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3323 break; |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3324 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3325 } |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3326 |
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3327 void |
16158
7eb614760ddb
rename lexical_feedback to octave_lexer
John W. Eaton <jwe@octave.org>
parents:
16154
diff
changeset
|
3328 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
|
3329 { |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3330 error (msg); |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3331 |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3332 OCTAVE_QUIT; |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3333 |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
3334 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
|
3335 } |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3336 |
053b0364b507
localize use of yy_fatal_error with lexical_feedback member function
John W. Eaton <jwe@octave.org>
parents:
16128
diff
changeset
|
3337 void |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3338 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
|
3339 { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3340 if (lexer_debug_flag) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3341 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3342 std::cerr << std::endl; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3343 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3344 display_start_state (); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3345 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3346 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
|
3347 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
|
3348 } |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3349 } |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3350 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3351 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3352 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
|
3353 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3354 OCTAVE_YYG; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3355 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3356 start_state_stack.push (state); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3357 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3358 BEGIN (start_state ()); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3359 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3360 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3361 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3362 octave_lexer::pop_start_state (void) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3363 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3364 OCTAVE_YYG; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3365 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3366 start_state_stack.pop (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3367 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3368 BEGIN (start_state ()); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3369 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3370 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3371 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3372 octave_lexer::clear_start_state (void) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3373 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3374 while (! start_state_stack.empty ()) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3375 start_state_stack.pop (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3376 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3377 push_start_state (INITIAL); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3378 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3379 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3380 void |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3381 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
|
3382 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3383 std::cerr << "S: "; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3384 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3385 switch (start_state ()) |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3386 { |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3387 case INITIAL: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3388 std::cerr << "INITIAL" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3389 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3390 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3391 case COMMAND_START: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3392 std::cerr << "COMMAND_START" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3393 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3394 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3395 case MATRIX_START: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3396 std::cerr << "MATRIX_START" << std::endl; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3397 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3398 |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3399 case INPUT_FILE_START: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3400 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
|
3401 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3402 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3403 case BLOCK_COMMENT_START: |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3404 std::cerr << "BLOCK_COMMENT_START" << std::endl; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3405 break; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3406 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3407 case LINE_COMMENT_START: |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3408 std::cerr << "LINE_COMMENT_START" << std::endl; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3409 break; |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
3410 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3411 case KLUGE: |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3412 std::cerr << "KLUGE" << std::endl; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3413 break; |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3414 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3415 default: |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3416 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
|
3417 break; |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3418 } |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3419 } |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3420 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3421 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3422 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
|
3423 bool bos, bool qit) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3424 { |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3425 lexer_debug (pattern); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3426 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3427 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
|
3428 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3429 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3430 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3431 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
|
3432 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
|
3433 { |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3434 lexer_debug (pattern); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3435 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3436 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
|
3437 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3438 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3439 bool |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3440 octave_lexer::maybe_unput_comma_before_unary_op (int tok) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3441 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3442 int prev_tok = previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3443 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3444 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3445 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3446 if (whitespace_is_significant () && space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3447 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3448 int c = text_yyinput (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3449 xunput (c); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3450 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3451 bool space_after = (c == ' ' || c == '\t'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3452 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
3453 if (! (prev_tok == '[' || prev_tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3454 || previous_token_is_binop () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3455 || ((tok == '+' || tok == '-') && space_after))) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3456 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3457 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3458 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3459 return unput_comma; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3460 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3461 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3462 int |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3463 octave_lexer::handle_unary_op (const char *pattern, int tok, bool convert, |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3464 bool bos, bool qit) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3465 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3466 lexer_debug (pattern); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3467 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3468 return maybe_unput_comma_before_unary_op (tok) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3469 ? -1 : handle_op_internal (pattern, tok, convert, bos, qit, true); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3470 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3471 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3472 int |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3473 octave_lexer::handle_incompatible_unary_op (const char *pattern, int tok, |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3474 bool convert, bool bos, bool qit) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3475 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3476 lexer_debug (pattern); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3477 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3478 return maybe_unput_comma_before_unary_op (tok) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3479 ? -1 : handle_op_internal (pattern, tok, convert, bos, qit, false); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3480 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
3481 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3482 int |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3483 octave_lexer::handle_assign_op (const char *pattern, int tok) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3484 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3485 lexer_debug (pattern); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3486 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3487 return (previous_token_value_is (']') && looking_at_matrix_or_assign_lhs) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3488 ? -1 : handle_op_internal (pattern, tok, false, false, false, true); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3489 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3490 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3491 int |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3492 octave_lexer::handle_incompatible_assign_op (const char *pattern, int tok) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3493 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3494 lexer_debug (pattern); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3495 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3496 return (previous_token_value_is (']') && looking_at_matrix_or_assign_lhs) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3497 ? -1 : handle_op_internal (pattern, tok, false, false, false, false); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3498 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3499 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3500 int |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3501 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
|
3502 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
|
3503 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3504 if (! compat) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3505 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
|
3506 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3507 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
|
3508 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3509 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
|
3510 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
|
3511 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
|
3512 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3513 return count_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3514 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3515 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3516 int |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3517 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
|
3518 { |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3519 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
|
3520 current_input_column); |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3521 |
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3522 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
|
3523 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3524 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3525 int |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3526 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
|
3527 { |
16231
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3528 if (! tok_val) |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
3529 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
|
3530 |
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3531 push_token (tok_val); |
2b15ae55c721
put all tokens in the token cache
John W. Eaton <jwe@octave.org>
parents:
16230
diff
changeset
|
3532 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3533 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
|
3534 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3535 return count_token_internal (tok); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3536 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3537 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3538 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3539 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
|
3540 { |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3541 token *tok_val = new token (tok, input_line_number, current_input_column); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3542 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3543 push_token (tok_val); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3544 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3545 return count_token_internal (tok); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3546 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3547 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3548 int |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3549 octave_lexer::count_token_internal (int tok) |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
3550 { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3551 if (tok != '\n') |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3552 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3553 Vtoken_count++; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3554 token_count++; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3555 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3556 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3557 return show_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3558 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3559 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3560 int |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3561 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
|
3562 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3563 if (Vdisplay_tokens) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3564 display_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3565 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3566 if (lexer_debug_flag) |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3567 { |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3568 std::cerr << "R: "; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3569 display_token (tok); |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3570 std::cerr << std::endl; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3571 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3572 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3573 return tok; |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
3574 } |