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