annotate libinterp/parse-tree/lex.h @ 16113:7c5e5e97a3bc

move static lexer helper functions to lexical_feedback class * lex.ll, lex.h oct-parse.yy (do_comma_insert_check, text_yyinput, xunput, fixup_column_count, inside_any_object_index, is_keyword_token, is_variable, grab_block_comment, grab_comment_block, process_comment, next_token_is_sep_op, next_token_is_postfix_unary_op, next_token_is_bin_op, scan_for_comments, eat_whitespace, handle_number, have_continuation, have_ellipsis_continuation, eat_continuation, handle_string, next_token_is_assign_op, next_token_is_index_op, handle_close_bracket, maybe_unput_comma, next_token_can_follow_bin_op, looks_like_command_arg, handle_superclass_identifier, handle_meta_identifier, handle_identifier, maybe_warn_separator_insert, gripe_single_quote_string, gripe_matlab_incompatible, maybe_gripe_matlab_incompatible_comment, gripe_matlab_incompatible_continuation, gripe_matlab_incompatible_operator): Declare as members of lexical_feedback class. Change all callers.
author John W. Eaton <jwe@octave.org>
date Tue, 26 Feb 2013 02:40:32 -0500
parents 3ec4f6488569
children 4f6c37cfbdce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 13973
diff changeset
3 Copyright (C) 1993-2012 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
4
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5775
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5775
diff changeset
10 option) any later version.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
11
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
15 for more details.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5775
diff changeset
18 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5775
diff changeset
19 <http://www.gnu.org/licenses/>.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
20
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22
383
0b52c68ec81f [project @ 1994-03-09 21:19:44 by jwe]
jwe
parents: 247
diff changeset
23 #if !defined (octave_lex_h)
0b52c68ec81f [project @ 1994-03-09 21:19:44 by jwe]
jwe
parents: 247
diff changeset
24 #define octave_lex_h 1
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
25
8745
6dc61981d18b better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents: 8701
diff changeset
26 #include <list>
16101
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
27 #include <set>
11464
21b5284fa78d avoid error when parsing nested functions
John W. Eaton <jwe@octave.org>
parents: 11367
diff changeset
28 #include <stack>
8745
6dc61981d18b better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents: 8701
diff changeset
29
5775
ace8d8d26933 [project @ 2006-04-24 19:13:06 by jwe]
jwe
parents: 5307
diff changeset
30 // FIXME -- these input buffer things should be members of a
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
31 // parser input stream class.
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
32
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
33 typedef struct yy_buffer_state *YY_BUFFER_STATE;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
34
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
35 // Associate a buffer with a new file to read.
9247
b2790fd23800 More export symbols to allow usage from an IDE.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
36 extern OCTINTERP_API YY_BUFFER_STATE create_buffer (FILE *f);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
37
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
38 // Report the current buffer.
9247
b2790fd23800 More export symbols to allow usage from an IDE.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
39 extern OCTINTERP_API YY_BUFFER_STATE current_buffer (void);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
40
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
41 // Connect to new buffer buffer.
9247
b2790fd23800 More export symbols to allow usage from an IDE.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
42 extern OCTINTERP_API void switch_to_buffer (YY_BUFFER_STATE buf);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
43
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
44 // Delete a buffer.
9247
b2790fd23800 More export symbols to allow usage from an IDE.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 8920
diff changeset
45 extern OCTINTERP_API void delete_buffer (YY_BUFFER_STATE buf);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
46
13973
2c664266e9d0 clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents: 13237
diff changeset
47 extern OCTINTERP_API void clear_all_buffers (void);
2c664266e9d0 clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents: 13237
diff changeset
48
2c664266e9d0 clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents: 13237
diff changeset
49 extern OCTINTERP_API void cleanup_parser (void);
2c664266e9d0 clean up parser memory on exit
John W. Eaton <jwe@octave.org>
parents: 13237
diff changeset
50
4867
c7f9ea142fda [project @ 2004-04-20 19:41:11 by jwe]
jwe
parents: 4753
diff changeset
51 // Is the given string a keyword?
c7f9ea142fda [project @ 2004-04-20 19:41:11 by jwe]
jwe
parents: 4753
diff changeset
52 extern bool is_keyword (const std::string& s);
c7f9ea142fda [project @ 2004-04-20 19:41:11 by jwe]
jwe
parents: 4753
diff changeset
53
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9396
diff changeset
54 extern void prep_lexer_for_script_file (void);
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9396
diff changeset
55 extern void prep_lexer_for_function_file (void);
7715
5b4d278ec828 parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents: 7634
diff changeset
56
16113
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
57 class
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
58 stream_reader
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
59 {
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
60 public:
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
61 virtual int getc (void) = 0;
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
62 virtual int ungetc (int c) = 0;
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
63
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
64 protected:
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
65 stream_reader (void) { }
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
66 ~stream_reader (void) { }
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
67
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
68 private:
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
69
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
70 // No copying!
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
71 stream_reader (const stream_reader&);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
72 stream_reader& operator = (const stream_reader&);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
73 };
16111
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
74
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
75 // Forward decl for lexical_feedback::token_stack.
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
76 class token;
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
77
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
78 // For communication between the lexer and parser.
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
79
3585
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3351
diff changeset
80 class
d9803711e047 [project @ 2000-02-08 04:35:39 by jwe]
jwe
parents: 3351
diff changeset
81 lexical_feedback
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
82 {
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
83 public:
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
84
16106
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
85 // Did eat_whitespace or eat_continuation eat a space or tab, or a
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
86 // newline, or both?
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
87 //
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
88 // Functions that return this type will return a logical OR of the
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
89 // following values:
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
90 //
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
91 // NO_WHITESPACE no spaces to eat
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
92 // SPACE_OR_TAB space or tab in input
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
93 // NEWLINE bare new line in input
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
94
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
95 enum whitespace_type
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
96 {
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
97 NO_WHITESPACE = 1,
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
98 SPACE_OR_TAB = 2,
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
99 NEWLINE = 4
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
100 };
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
101
031117f4db7c use enum for values returned by eat_continuation and eat_whitespace
John W. Eaton <jwe@octave.org>
parents: 16105
diff changeset
102
16104
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
103 // Track nesting of square brackets, curly braces, and parentheses.
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
104
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
105 class bbp_nesting_level
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
106 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
107 private:
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
108
16107
3b791008b88e give name to anonymous enum
John W. Eaton <jwe@octave.org>
parents: 16106
diff changeset
109 enum bracket_type
16104
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
110 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
111 BRACKET = 1,
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
112 BRACE = 2,
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
113 PAREN = 3
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
114 };
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
115
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
116 public:
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
117
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
118 bbp_nesting_level (void) : context () { }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
119
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
120 bbp_nesting_level (const bbp_nesting_level& nl) : context (nl.context) { }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
121
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
122 bbp_nesting_level& operator = (const bbp_nesting_level& nl)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
123 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
124 if (&nl != this)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
125 context = nl.context;
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
126
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
127 return *this;
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
128 }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
129
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
130 ~bbp_nesting_level (void) { }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
131
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
132 void bracket (void) { context.push (BRACKET); }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
133
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
134 bool is_bracket (void)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
135 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
136 return ! context.empty () && context.top () == BRACKET;
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
137 }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
138
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
139 void brace (void) { context.push (BRACE); }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
140
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
141 bool is_brace (void)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
142 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
143 return ! context.empty () && context.top () == BRACE;
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
144 }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
145
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
146 void paren (void) { context.push (PAREN); }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
147
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
148 bool is_paren (void)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
149 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
150 return ! context.empty () && context.top () == PAREN;
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
151 }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
152
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
153 bool is_bracket_or_brace (void)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
154 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
155 return (! context.empty ()
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
156 && (context.top () == BRACKET || context.top () == BRACE));
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
157 }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
158
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
159 bool none (void) { return context.empty (); }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
160
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
161 void remove (void)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
162 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
163 if (! context.empty ())
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
164 context.pop ();
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
165 }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
166
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
167 void clear (void)
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
168 {
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
169 while (! context.empty ())
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
170 context.pop ();
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
171 }
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
172
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
173 private:
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
174
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
175 std::stack<int> context;
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
176 };
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
177
11515
6dbf9bcce90e more data member initialization fixes
John W. Eaton <jwe@octave.org>
parents: 11464
diff changeset
178 lexical_feedback (void)
16100
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
179 : convert_spaces_to_comma (true), do_comma_insert (false),
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
180 at_beginning_of_statement (true),
16101
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
181 looking_at_anon_fcn_args (false), looking_at_return_list (false),
16100
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
182 looking_at_parameter_list (false), looking_at_decl_list (false),
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
183 looking_at_initializer_expression (false),
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
184 looking_at_matrix_or_assign_lhs (false),
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
185 looking_for_object_index (false),
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
186 looking_at_indirect_ref (false), parsing_class_method (false),
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
187 maybe_classdef_get_set_method (false), parsing_classdef (false),
16102
679a54d274d9 move global parser_end_of_input variable to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16101
diff changeset
188 quote_is_transpose (false), parser_end_of_input (false),
16103
6434f70f0ee0 move input_line_number and current_input_column to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16102
diff changeset
189 input_line_number (1), current_input_column (1),
16102
679a54d274d9 move global parser_end_of_input variable to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16101
diff changeset
190 bracketflag (0), braceflag (0),
16100
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
191 looping (0), defining_func (0), looking_at_function_handle (0),
16105
b7de58feb2d3 move block_comment_nesting_level to lexical_feedback_class
John W. Eaton <jwe@octave.org>
parents: 16104
diff changeset
192 block_comment_nesting_level (0),
16100
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
193 looking_at_object_index (), parsed_function_name (),
16104
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
194 pending_local_variables (), nesting_level ()
16101
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
195 {
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
196 init ();
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
197 }
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
198
16111
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
199 ~lexical_feedback (void);
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
200
16101
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
201 void init (void)
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
202 {
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
203 // The closest paren, brace, or bracket nesting is not an object
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
204 // index.
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
205 looking_at_object_index.push_front (false);
8d19626b38ae provide copy contructor and operator = for lexical_feedback class.
John W. Eaton <jwe@octave.org>
parents: 16100
diff changeset
206 }
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
207
16113
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
208 void do_comma_insert_check (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
209
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
210 int text_yyinput (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
211
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
212 void xunput (char c, char *buf);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
213
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
214 void fixup_column_count (char *s);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
215
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
216 bool inside_any_object_index (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
217
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
218 int is_keyword_token (const std::string& s);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
219
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
220 bool is_variable (const std::string& name);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
221
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
222 std::string grab_block_comment (stream_reader& reader, bool& eof);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
223
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
224 std::string grab_comment_block (stream_reader& reader, bool at_bol,
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
225 bool& eof);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
226
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
227 int process_comment (bool start_in_block, bool& eof);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
228
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
229 bool next_token_is_sep_op (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
230
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
231 bool next_token_is_postfix_unary_op (bool spc_prev);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
232
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
233 bool next_token_is_bin_op (bool spc_prev);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
234
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
235 void scan_for_comments (const char *text);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
236
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
237 int eat_whitespace (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
238
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
239 void handle_number (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
240
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
241 bool have_continuation (bool trailing_comments_ok = true);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
242
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
243 bool have_ellipsis_continuation (bool trailing_comments_ok = true);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
244
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
245 int eat_continuation (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
246
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
247 int handle_string (char delim);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
248
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
249 bool next_token_is_assign_op (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
250
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
251 bool next_token_is_index_op (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
252
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
253 int handle_close_bracket (bool spc_gobbled, int bracket_type);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
254
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
255 void maybe_unput_comma (int spc_gobbled);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
256
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
257 bool next_token_can_follow_bin_op (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
258
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
259 bool looks_like_command_arg (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
260
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
261 int handle_superclass_identifier (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
262
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
263 int handle_meta_identifier (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
264
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
265 int handle_identifier (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
266
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
267 void maybe_warn_separator_insert (char sep);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
268
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
269 void gripe_single_quote_string (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
270
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
271 void gripe_matlab_incompatible (const std::string& msg);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
272
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
273 void maybe_gripe_matlab_incompatible_comment (char c);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
274
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
275 void gripe_matlab_incompatible_continuation (void);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
276
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
277 void gripe_matlab_incompatible_operator (const std::string& op);
7c5e5e97a3bc move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16111
diff changeset
278
2877
5c1b9e545dd1 [project @ 1997-04-24 09:07:39 by jwe]
jwe
parents: 2857
diff changeset
279 // TRUE means that we should convert spaces to a comma inside a
2857
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
280 // matrix definition.
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
281 bool convert_spaces_to_comma;
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
282
16100
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
283 // GAG. Stupid kludge so that [[1,2][3,4]] will work.
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
284 bool do_comma_insert;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
285
8746
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
286 // TRUE means we are at the beginning of a statement, where a
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
287 // command name is possible.
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
288 bool at_beginning_of_statement;
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
289
13237
1bfca2bbea8b fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
290 // TRUE means we are parsing an anonymous function argument list.
1bfca2bbea8b fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
291 bool looking_at_anon_fcn_args;
1bfca2bbea8b fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
292
2877
5c1b9e545dd1 [project @ 1997-04-24 09:07:39 by jwe]
jwe
parents: 2857
diff changeset
293 // TRUE means we're parsing the return list for a function.
2857
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
294 bool looking_at_return_list;
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
295
2877
5c1b9e545dd1 [project @ 1997-04-24 09:07:39 by jwe]
jwe
parents: 2857
diff changeset
296 // TRUE means we're parsing the parameter list for a function.
2857
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
297 bool looking_at_parameter_list;
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
298
8701
1652e39b934e handle command names in declaration lists
John W. Eaton <jwe@octave.org>
parents: 8001
diff changeset
299 // TRUE means we're parsing a declaration list (global or
1652e39b934e handle command names in declaration lists
John W. Eaton <jwe@octave.org>
parents: 8001
diff changeset
300 // persistent).
1652e39b934e handle command names in declaration lists
John W. Eaton <jwe@octave.org>
parents: 8001
diff changeset
301 bool looking_at_decl_list;
1652e39b934e handle command names in declaration lists
John W. Eaton <jwe@octave.org>
parents: 8001
diff changeset
302
7634
ae90e05ad299 fix parameter list initializer bug
John W. Eaton <jwe@octave.org>
parents: 7336
diff changeset
303 // TRUE means we are looking at the initializer expression for a
ae90e05ad299 fix parameter list initializer bug
John W. Eaton <jwe@octave.org>
parents: 7336
diff changeset
304 // parameter list element.
ae90e05ad299 fix parameter list initializer bug
John W. Eaton <jwe@octave.org>
parents: 7336
diff changeset
305 bool looking_at_initializer_expression;
ae90e05ad299 fix parameter list initializer bug
John W. Eaton <jwe@octave.org>
parents: 7336
diff changeset
306
3189
bef7b73c0724 [project @ 1998-10-16 18:05:26 by jwe]
jwe
parents: 3165
diff changeset
307 // TRUE means we're parsing a matrix or the left hand side of
bef7b73c0724 [project @ 1998-10-16 18:05:26 by jwe]
jwe
parents: 3165
diff changeset
308 // multi-value assignment statement.
bef7b73c0724 [project @ 1998-10-16 18:05:26 by jwe]
jwe
parents: 3165
diff changeset
309 bool looking_at_matrix_or_assign_lhs;
bef7b73c0724 [project @ 1998-10-16 18:05:26 by jwe]
jwe
parents: 3165
diff changeset
310
8745
6dc61981d18b better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents: 8701
diff changeset
311 // Object index not possible until we've seen something.
6dc61981d18b better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents: 8701
diff changeset
312 bool looking_for_object_index;
4234
90e44267e8cf [project @ 2002-12-21 17:15:25 by jwe]
jwe
parents: 4182
diff changeset
313
2877
5c1b9e545dd1 [project @ 1997-04-24 09:07:39 by jwe]
jwe
parents: 2857
diff changeset
314 // TRUE means we're looking at an indirect reference to a
2857
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
315 // structure element.
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
316 bool looking_at_indirect_ref;
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
317
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
318 // TRUE means we are parsing a class method in function or classdef file.
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
319 bool parsing_class_method;
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
320
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
321 // TRUE means we are parsing a class method declaration line in a
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
322 // classdef file and can accept a property get or set method name.
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
323 // For example, "get.PropertyName" is recognized as a function name.
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
324 bool maybe_classdef_get_set_method;
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
325
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
326 // TRUE means we are parsing a classdef file
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
327 bool parsing_classdef;
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
328
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
329 // Return transpose or start a string?
2857
5448c8cba402 [project @ 1997-03-31 07:06:10 by jwe]
jwe
parents: 2847
diff changeset
330 bool quote_is_transpose;
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
331
16102
679a54d274d9 move global parser_end_of_input variable to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16101
diff changeset
332 // TRUE means that we have encountered EOF on the input stream.
679a54d274d9 move global parser_end_of_input variable to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16101
diff changeset
333 bool parser_end_of_input;
679a54d274d9 move global parser_end_of_input variable to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16101
diff changeset
334
16103
6434f70f0ee0 move input_line_number and current_input_column to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16102
diff changeset
335 // The current 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
336 int 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
337
6434f70f0ee0 move input_line_number and current_input_column to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16102
diff changeset
338 // The column of the current token.
6434f70f0ee0 move input_line_number and current_input_column to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16102
diff changeset
339 int current_input_column;
6434f70f0ee0 move input_line_number and current_input_column to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16102
diff changeset
340
16100
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
341 // Square bracket level count.
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
342 int bracketflag;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
343
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
344 // Curly brace level count.
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
345 int braceflag;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
346
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
347 // TRUE means we're in the middle of defining a loop.
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
348 int looping;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
349
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
350 // Nonzero means we're in the middle of defining a function.
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
351 int defining_func;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
352
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
353 // Nonzero means we are parsing a function handle.
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
354 int looking_at_function_handle;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
355
16105
b7de58feb2d3 move block_comment_nesting_level to lexical_feedback_class
John W. Eaton <jwe@octave.org>
parents: 16104
diff changeset
356 // Nestng level for blcok comments.
b7de58feb2d3 move block_comment_nesting_level to lexical_feedback_class
John W. Eaton <jwe@octave.org>
parents: 16104
diff changeset
357 int block_comment_nesting_level;
b7de58feb2d3 move block_comment_nesting_level to lexical_feedback_class
John W. Eaton <jwe@octave.org>
parents: 16104
diff changeset
358
16100
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
359 // If the front of the list is TRUE, the closest paren, brace, or
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
360 // bracket nesting is an index for an object.
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
361 std::list<bool> looking_at_object_index;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
362
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
363 // If the top of the stack is TRUE, then we've already seen the name
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
364 // of the current function. Should only matter if
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
365 // current_function_level > 0
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
366 std::stack<bool> parsed_function_name;
6b26e18d1dcb reorder data members in lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 15195
diff changeset
367
8001
ff9e7873f8ea improve handling of command-style names in matrix_or_assign_lhs context
John W. Eaton <jwe@octave.org>
parents: 7723
diff changeset
368 // Set of identifiers that might be local variable names.
ff9e7873f8ea improve handling of command-style names in matrix_or_assign_lhs context
John W. Eaton <jwe@octave.org>
parents: 7723
diff changeset
369 std::set<std::string> pending_local_variables;
16104
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
370
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
371 // Is the closest nesting level a square bracket, squiggly brace or
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
372 // a paren?
c8974e28da59 move nesting_level to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16103
diff changeset
373 bbp_nesting_level nesting_level;
16110
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
374
16111
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
375 // Stack to hold tokens so that we can delete them when the parser is
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
376 // reset and avoid growing forever just because we are stashing some
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
377 // information.
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
378 std::stack <token*> token_stack;
3ec4f6488569 move token stack to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents: 16110
diff changeset
379
16110
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
380 private:
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
381
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
382 // No copying!
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
383
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
384 lexical_feedback (const lexical_feedback&);
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
385
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
386 lexical_feedback& operator = (const lexical_feedback&);
1826
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
387 };
b14829582cc4 [project @ 1996-02-02 03:05:07 by jwe]
jwe
parents: 1315
diff changeset
388
16110
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
389 // The current state of the lexer.
7302f8a4df83 use pointer for global lexical_feedback structure
John W. Eaton <jwe@octave.org>
parents: 16107
diff changeset
390 extern lexical_feedback *curr_lexer;
440
e27d10f2e573 [project @ 1994-05-30 03:33:37 by jwe]
jwe
parents: 383
diff changeset
391
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
392 #endif