Mercurial > octave
annotate libinterp/parse-tree/lex.ll @ 29857:0b01806bb663
fix command syntax parsing error (bug #60882)
* lex.h, lex.ll (lexical_feedback::maybe_mark_previous_token_as_variable):
Delete function and all uses.
(lexical_feedback::m_pending_local_variables): Now a list of sets.
Change all uses.
(lexical_feedback::init): Insert empty set as first element of
m_pending_local_variables.
(lexical_feedback::reset): Preserve first element of
m_pending_local_variables.
(lexical_feedback::mark_as_variable): New function.
(lexical_feedback::is_variable): New function.
(base_lexer::is_variable): Delete.
* oct-parse.yy: Anywhere a symbol scope is pushed to or popped from
the symbol table context, also push or pop a set of pending local
variables. Mark symbols that appear on the LHS of '=' operators as
pending variables for the current scope.
* test/bug-60882/bug-60882.tst, test/bug-60882/bug_60882.m,
test/bug-60882/module.mk: New files.
* test/module.mk: Update.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 06 Jul 2021 23:16:14 -0400 |
parents | ad1491462d13 |
children | e2e493712818 |
rev | line source |
---|---|
1994 | 1 /* |
1 | 2 |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 We are using the pure parser interface and the reentrant lexer interface |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 but the Octave parser and lexer are NOT properly reentrant because both |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 still use many global variables. It should be safe to create a parser |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 object and call it while another parser object is active (to parse a |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 callback function while the main interactive parser is waiting for |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 input, for example) if you take care to properly save and restore |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 (typically with an unwind_protect object) relevant global values before |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 and after the nested call. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 |
16150
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
12 */ |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
13 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
14 %top { |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
28773
diff
changeset
|
17 // Copyright (C) 1993-2021 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
25 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
26 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
27 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
28 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
29 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
30 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
31 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
32 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
33 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
34 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
35 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
36 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
37 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
38 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
39 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
40 #if defined (HAVE_CONFIG_H) |
22003
2d3972b802ff
use consistent style for including config.h in source files
John W. Eaton <jwe@octave.org>
parents:
21987
diff
changeset
|
41 # include "config.h" |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
42 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
43 |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
44 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
45 // This one needs to be global. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
46 # pragma GCC diagnostic ignored "-Wunused-function" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
47 // Disable these warnings for code that is generated by flex, |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
48 // including pattern rules. Push the current state so we can |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
49 // restore the warning state prior to functions we define at |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
50 // the bottom of the file. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
51 # pragma GCC diagnostic push |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
52 # pragma GCC diagnostic ignored "-Wold-style-cast" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
53 # pragma GCC diagnostic ignored "-Wsign-compare" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
54 # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" |
24445
fe54e9633815
lex.ll: Fix macro for implicit fallthrough warning.
John W. Eaton <jwe@octave.org>
parents:
24444
diff
changeset
|
55 # if defined (HAVE_WARN_IMPLICIT_FALLTHROUGH) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
56 # pragma GCC diagnostic ignored "-Wimplicit-fallthrough" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
57 # endif |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
58 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
59 |
21332
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
60 // Define away the deprecated register storage class specifier to avoid |
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
61 // potential warnings about it. |
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
62 #if ! defined (register) |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
63 # define register |
21332
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
64 #endif |
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
65 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
66 } |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
67 |
4753 | 68 %option prefix = "octave_" |
16146 | 69 %option noyywrap |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
70 %option reentrant |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
71 %option bison-bridge |
4753 | 72 |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
73 %option noyyalloc |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
74 %option noyyrealloc |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
75 %option noyyfree |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
76 |
18234 | 77 %x COMMAND_START |
4208 | 78 %s MATRIX_START |
4240 | 79 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
80 %x INPUT_FILE_START |
1 | 81 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
82 %x BLOCK_COMMENT_START |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
83 %x LINE_COMMENT_START |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
84 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
85 %x DQ_STRING_START |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
86 %x SQ_STRING_START |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
87 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
88 %x FQ_IDENT_START |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
89 |
1 | 90 %{ |
240 | 91 |
1341 | 92 #include <cctype> |
93 #include <cstring> | |
94 | |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
95 #include <algorithm> |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
96 #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
|
97 #include <set> |
5765 | 98 #include <sstream> |
1823 | 99 #include <string> |
4214 | 100 #include <stack> |
1823 | 101 |
2926 | 102 #include "cmd-edit.h" |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
103 #include "lo-mappers.h" |
4153 | 104 #include "quit.h" |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
105 #include "unistd-wrappers.h" |
2926 | 106 |
16154
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
107 // These would be alphabetical, but oct-parse.h must be included before |
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
108 // oct-gperf.h and oct-parse.h must be included after token.h and the tree |
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
109 // class declarations. We can't include oct-parse.h in oct-gperf.h |
1497 | 110 // because it may not be protected to allow it to be included multiple |
111 // times. | |
112 | |
4264 | 113 #include "Cell.h" |
2181 | 114 #include "defun.h" |
1355 | 115 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21074
diff
changeset
|
116 #include "errwarn.h" |
1351 | 117 #include "input.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
22089
diff
changeset
|
118 #include "interpreter.h" |
1355 | 119 #include "lex.h" |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
22003
diff
changeset
|
120 #include "octave.h" |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
121 #include "ov-magic-int.h" |
2891 | 122 #include "ov.h" |
1355 | 123 #include "parse.h" |
2987 | 124 #include "pt-all.h" |
2891 | 125 #include "symtab.h" |
126 #include "token.h" | |
1355 | 127 #include "utils.h" |
128 #include "variables.h" | |
23479
06bf3a0b08bf
maint: Use "" instead of <> for our own include files.
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
129 #include "oct-parse.h" |
06bf3a0b08bf
maint: Use "" instead of <> for our own include files.
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
130 #include "oct-gperf.h" |
1 | 131 |
18974
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
132 // FIXME: with bison 3.x, OCTAVE_STYPE appears in the generated |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
133 // oct-parse.h file, but there is no definition for YYSTYPE, which is |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
134 // needed by the code that is generated by flex. I can't seem to find a |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
135 // way to tell flex to use OCTAVE_STYPE instead of YYSTYPE in the code |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
136 // it generates, or to tell bison to provide the definition of YYSTYPE |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
137 // in the generated oct-parse.h file. |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
138 |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
139 #if defined (OCTAVE_STYPE_IS_DECLARED) && ! defined YYSTYPE |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
140 # define YYSTYPE OCTAVE_STYPE |
18974
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
141 #endif |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
142 |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
143 #define YY_NO_UNISTD_H 1 |
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
144 #define isatty octave_isatty_wrapper |
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
145 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
146 #if ! (defined (FLEX_SCANNER) \ |
2716 | 147 && defined (YY_FLEX_MAJOR_VERSION) && YY_FLEX_MAJOR_VERSION >= 2 \ |
148 && defined (YY_FLEX_MINOR_VERSION) && YY_FLEX_MINOR_VERSION >= 5) | |
149 #error lex.l requires flex version 2.5.4 or later | |
150 #endif | |
151 | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
152 #define YY_EXTRA_TYPE octave::base_lexer * |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
153 #define curr_lexer yyextra |
4753 | 154 |
155 // Arrange to get input via readline. | |
156 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
157 #if defined (YY_INPUT) |
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
158 # undef YY_INPUT |
4753 | 159 #endif |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
160 #define YY_INPUT(buf, result, max_size) \ |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
161 result = curr_lexer->fill_flex_buffer (buf, max_size) |
4753 | 162 |
163 // Try to avoid crashing out completely on fatal scanner errors. | |
164 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
165 #if defined (YY_FATAL_ERROR) |
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
166 # undef YY_FATAL_ERROR |
4753 | 167 #endif |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
168 #define YY_FATAL_ERROR(msg) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
169 (yyget_extra (yyscanner))->fatal_error (msg) |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
170 |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
171 #define CMD_OR_OP(PATTERN, TOK, COMPAT) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
172 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
173 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
174 curr_lexer->lexer_debug (PATTERN); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
175 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
176 if (curr_lexer->looks_like_command_arg ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
177 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
178 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
179 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
180 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
181 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
182 return curr_lexer->handle_op (TOK, false, COMPAT); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
183 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
184 while (0) |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
185 |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
186 #define CMD_OR_COMPUTED_ASSIGN_OP(PATTERN, TOK) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
187 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
188 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
189 curr_lexer->lexer_debug (PATTERN); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
190 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
191 if (curr_lexer->previous_token_may_be_command () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
192 && curr_lexer->space_follows_previous_token ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
193 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
194 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
195 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
196 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
197 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
198 return curr_lexer->handle_op (TOK, false, false); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
199 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
200 while (0) |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
201 |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
202 #define CMD_OR_UNARY_OP(PATTERN, TOK, COMPAT) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
203 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
204 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
205 curr_lexer->lexer_debug (PATTERN); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
206 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
207 if (curr_lexer->previous_token_may_be_command ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
208 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
209 if (curr_lexer->looks_like_command_arg ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
210 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
211 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
212 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
213 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
214 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
215 return curr_lexer->handle_op (TOK, false, COMPAT); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
216 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
217 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
218 { \ |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
219 if (curr_lexer->maybe_unput_comma_before_unary_op (TOK)) \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
220 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
221 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
222 curr_lexer->xunput (','); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
223 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
224 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
225 return curr_lexer->handle_op (TOK, false, COMPAT); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
226 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
227 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
228 while (0) |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
229 |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
230 #define HANDLE_EOB_OR_EOF(STATUS) \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
231 do \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
232 { \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
233 if (curr_lexer->is_push_lexer ()) \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
234 { \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
235 if (curr_lexer->at_end_of_buffer ()) \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
236 return STATUS; \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
237 \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
238 if (curr_lexer->at_end_of_file ()) \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
239 return curr_lexer->handle_end_of_input (); \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
240 } \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
241 } \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
242 while (0) |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
243 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
244 // If we are at the end of the buffer, ask for more input. |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
245 // If we are at the end of the file, deal with it. |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
246 // Otherwise, just keep going with the text from the current buffer. |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
247 #define HANDLE_STRING_CONTINUATION \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
248 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
249 { \ |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
250 curr_lexer->m_filepos.next_line (); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
251 \ |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
252 HANDLE_EOB_OR_EOF (-1); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
253 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
254 while (0) |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
255 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
256 #define HANDLE_NUMBER(PATTERN, BASE) \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
257 do \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
258 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
259 curr_lexer->lexer_debug (PATTERN); \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
260 \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
261 if (curr_lexer->previous_token_may_be_command () \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
262 && curr_lexer->space_follows_previous_token ()) \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
263 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
264 yyless (0); \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
265 curr_lexer->push_start_state (COMMAND_START); \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
266 } \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
267 else \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
268 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
269 int tok = curr_lexer->previous_token_value (); \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
270 \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
271 if (curr_lexer->whitespace_is_significant () \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
272 && curr_lexer->space_follows_previous_token () \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
273 && ! (tok == '[' || tok == '{' \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
274 || curr_lexer->previous_token_is_binop ())) \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
275 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
276 yyless (0); \ |
28774 | 277 curr_lexer->xunput (','); \ |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
278 } \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
279 else \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
280 return curr_lexer->handle_number<BASE> (); \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
281 } \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
282 } \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
283 while (0) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
284 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
285 #define HANDLE_IDENTIFIER(pattern, get_set) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
286 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
287 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
288 curr_lexer->lexer_debug (pattern); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
289 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
290 int tok = curr_lexer->previous_token_value (); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
291 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
292 if (curr_lexer->whitespace_is_significant () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
293 && curr_lexer->space_follows_previous_token () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
294 && ! (tok == '[' || tok == '{' \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
295 || curr_lexer->previous_token_is_binop ())) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
296 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
297 yyless (0); \ |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
298 curr_lexer->xunput (','); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
299 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
300 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
301 { \ |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
302 if (! curr_lexer->m_looking_at_decl_list \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
303 && curr_lexer->previous_token_may_be_command ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
304 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
305 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
306 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
307 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
308 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
309 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
310 if (get_set) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
311 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
312 yyless (3); \ |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
313 curr_lexer->m_filepos.increment_column (3); \ |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
314 curr_lexer->m_maybe_classdef_get_set_method = false; \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
315 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
316 \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
317 return curr_lexer->handle_identifier (); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
318 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
319 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
320 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
321 while (0) |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
322 |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
323 static inline bool |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
324 is_space_or_tab (char c) |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
325 { |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
326 return c == ' ' || c == '\t'; |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
327 } |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
328 |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
329 static inline bool |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
330 is_space_or_tab_or_eol (char c) |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
331 { |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
332 return c == ' ' || c == '\t' || c == '\n' || c == '\r'; |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
333 } |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
334 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
335 namespace octave |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
336 { |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
337 bool iskeyword (const std::string& s) |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
338 { |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
339 // Parsing function names like "set.property_name" inside |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
340 // classdef-style class definitions is simplified by handling the |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
341 // "set" and "get" portions of the names using the same mechanism |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
342 // as is used for keywords. However, they are not really keywords |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
343 // in the language, so omit them from the list of possible |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
344 // keywords. Likewise for "arguments", "enumeration", "events", |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
345 // "methods", and "properties". |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
346 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
347 // FIXME: The following check is duplicated in Fiskeyword. |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
348 return (octave_kw_hash::in_word_set (s.c_str (), s.length ()) != nullptr |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
349 && ! (s == "set" || s == "get" || s == "arguments" |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
350 || s == "enumeration" || s == "events" |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
351 || s == "methods" || s == "properties")); |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
352 } |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
353 } |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
354 |
1 | 355 %} |
356 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
357 D [0-9] |
20588
e34692daf663
Extend parser to accept '_' in numbers.
Rik <rik@octave.org>
parents:
20547
diff
changeset
|
358 D_ [0-9_] |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
359 S [ \t] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
360 NL ((\n)|(\r)|(\r\n)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
361 CCHAR [#%] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
362 IDENT ([_$a-zA-Z][_$a-zA-Z0-9]*) |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
363 FQIDENT ({IDENT}({S}*\.{S}*{IDENT})*) |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
364 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
365 %{ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
366 // Decimal numbers may be real or imaginary but always create |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
367 // double precision constants initially. Any conversion to single |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
368 // precision happens as part of an expression evaluation in the |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
369 // interpreter, not the lexer and parser. |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
370 %} |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
371 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
372 DECIMAL_DIGITS ({D}{D_}*) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
373 EXPONENT ([DdEe][+-]?{DECIMAL_DIGITS}) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
374 REAL_DECIMAL ((({DECIMAL_DIGITS}\.?)|({DECIMAL_DIGITS}?\.{DECIMAL_DIGITS})){EXPONENT}?) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
375 IMAG_DECIMAL ({REAL_DECIMAL}[IiJj]) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
376 DECIMAL_NUMBER ({REAL_DECIMAL}|{IMAG_DECIMAL}) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
377 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
378 %{ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
379 // It is possible to specify signedness and size for binary and |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
380 // hexadecimal numbers but there is no special syntax for imaginary |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
381 // constants. Binary and hexadecimal constants always create integer |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
382 // valued constants ({u,}int{8,16,32,64}). If a size is not specified, |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
383 // the smallest integer type that will hold the value is used. Negative |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
384 // values may be created with a signed size specification by applying |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
385 // twos-complement conversion (for example, 0xffs8 produces an 8-bit |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
386 // signed integer equal to -1 and 0b10000000s8 produces an 8-bit signed |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
387 // integer equal to -128). |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
388 %} |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
389 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
390 SIZE_SUFFIX ([su](8|16|32|64)) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
391 BINARY_BITS (0[bB][01][01_]*) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
392 BINARY_NUMBER ({BINARY_BITS}|{BINARY_BITS}{SIZE_SUFFIX}) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
393 HEXADECIMAL_BITS (0[xX][0-9a-fA-F][0-9a-fA-F_]*) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
394 HEXADECIMAL_NUMBER ({HEXADECIMAL_BITS}|{HEXADECIMAL_BITS}{SIZE_SUFFIX}) |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
395 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
396 ANY_EXCEPT_NL [^\r\n] |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
397 ANY_INCLUDING_NL (.|{NL}) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
398 |
1 | 399 %% |
400 | |
9474
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
401 %{ |
20835
14cd86258b3d
use 'invalid' instead of 'bogus' in source files
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
402 // Make script and function files start with an invalid token. This makes |
9474
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
403 // the parser go down a special path. |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
404 %} |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
405 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
406 <INPUT_FILE_START>{ANY_INCLUDING_NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
407 curr_lexer->lexer_debug ("<INPUT_FILE_START>{ANY_INCLUDING_NL}"); |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
408 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
409 curr_lexer->xunput (yytext[0]); |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
410 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
411 // May be reset later if we see "function" or "classdef" appears |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
412 // as the first token. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
413 curr_lexer->m_reading_script_file = true; |
16203
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
414 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
415 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
416 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
417 return curr_lexer->show_token (INPUT_FILE); |
4238 | 418 } |
419 | |
18774
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
420 <INPUT_FILE_START><<EOF>> { |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
421 curr_lexer->lexer_debug ("<INPUT_FILE_START><<EOF>>"); |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
422 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
423 // May be reset later if we see "function" or "classdef" appears |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
424 // as the first token. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
425 curr_lexer->m_reading_script_file = true; |
18774
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
426 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
427 curr_lexer->pop_start_state (); |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
428 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
429 return curr_lexer->show_token (INPUT_FILE); |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
430 } |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
431 |
968 | 432 %{ |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
433 // Help and other command-style functions. |
968 | 434 %} |
435 | |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
436 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
437 // Commands can be continued on a second line using the ellipsis. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
438 // If an argument is in construction, it is completed. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
439 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
440 |
18312
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
441 <COMMAND_START>(\.\.\.){ANY_EXCEPT_NL}*{NL} { |
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
442 curr_lexer->lexer_debug ("<COMMAND_START>(\\.\\.\\.){ANY_EXCEPT_NL}*{NL}"); |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
443 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
444 if (! curr_lexer->m_string_text.empty ()) |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
445 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
446 yyless (0); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
447 curr_lexer->m_tok_end = curr_lexer->m_filepos; |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
448 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
449 } |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
450 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
451 HANDLE_STRING_CONTINUATION; |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
452 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
453 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
454 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
455 // Commands normally end at the end of a line or a semicolon. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
456 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
457 |
18312
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
458 <COMMAND_START>({CCHAR}{ANY_EXCEPT_NL}*)?{NL} { |
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
459 curr_lexer->lexer_debug ("<COMMAND_START>({CCHAR}{ANY_EXCEPT_NL}*)?{NL}"); |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
460 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
461 if (! curr_lexer->m_string_text.empty ()) |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
462 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
463 yyless (0); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
464 curr_lexer->m_tok_end = curr_lexer->m_filepos; |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
465 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
466 } |
8535 | 467 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
468 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
469 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
470 curr_lexer->m_filepos.next_line (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
471 curr_lexer->m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
472 curr_lexer->m_at_beginning_of_statement = true; |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
473 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
474 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
475 return curr_lexer->handle_token ('\n'); |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
476 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
477 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
478 <COMMAND_START>[\,\;] { |
18234 | 479 curr_lexer->lexer_debug ("<COMMAND_START>[\\,\\;]"); |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
480 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
481 if (yytext[0] != ',' || curr_lexer->m_command_arg_paren_count == 0) |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
482 { |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
483 if (! curr_lexer->m_string_text.empty ()) |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
484 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
485 yyless (0); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
486 curr_lexer->m_tok_end = curr_lexer->m_filepos; |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
487 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
488 } |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
489 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
490 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
491 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
492 curr_lexer->m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
493 curr_lexer->m_at_beginning_of_statement = true; |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
494 curr_lexer->pop_start_state (); |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
495 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
496 return curr_lexer->handle_token (yytext[0]); |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
497 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
498 else |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
499 { |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
500 curr_lexer->m_string_text += yytext; |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
501 curr_lexer->m_filepos.increment_column (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
502 } |
967 | 503 } |
1 | 504 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
505 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
506 // Unbalanced parentheses serve as pseudo-quotes: they are included in |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
507 // the final argument string, but they cause parentheses and quotes to |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
508 // be slurped into that argument as well. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
509 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
510 |
18234 | 511 <COMMAND_START>[\(\[\{]* { |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
512 curr_lexer->lexer_debug ("<COMMAND_START>[\\(\\[\\{]+"); |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
513 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
514 curr_lexer->m_command_arg_paren_count += yyleng; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
515 curr_lexer->m_string_text += yytext; |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
516 curr_lexer->m_filepos.increment_column (yyleng); |
967 | 517 } |
1 | 518 |
18234 | 519 <COMMAND_START>[\)\]\}]* { |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
520 curr_lexer->lexer_debug ("<COMMAND_START>[\\)\\]\\}]+"); |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
521 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
522 curr_lexer->m_command_arg_paren_count -= yyleng; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
523 curr_lexer->m_string_text += yytext; |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
524 curr_lexer->m_filepos.increment_column (yyleng); |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
525 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
526 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
527 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
528 // Handle quoted strings. Quoted strings that are not separated by |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
529 // whitespace from other argument text are combined with that previous |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
530 // text. For instance, |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
531 // |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
532 // command 'text1'"text2" |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
533 // |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
534 // has a single argument text1text2, not two separate arguments. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
535 // That's why we must test to see if we are in command argument mode |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
536 // when processing the end of a string. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
537 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
538 |
4208 | 539 <COMMAND_START>[\"\'] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
540 curr_lexer->lexer_debug ("<COMMAND_START>[\\\"\\']"); |
8535 | 541 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
542 if (curr_lexer->m_command_arg_paren_count == 0) |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
543 curr_lexer->begin_string (yytext[0] == '"' |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
544 ? DQ_STRING_START : SQ_STRING_START); |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
545 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
546 curr_lexer->m_string_text += yytext; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
547 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
548 curr_lexer->m_filepos.increment_column (yyleng); |
975 | 549 } |
550 | |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
551 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
552 // In standard command argument processing, whitespace separates |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
553 // arguments. In the presence of unbalanced parentheses, it is |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
554 // incorporated into the argument. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
555 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
556 |
18234 | 557 <COMMAND_START>{S}* { |
558 curr_lexer->lexer_debug ("<COMMAND_START>{S}*"); | |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
559 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
560 if (curr_lexer->m_command_arg_paren_count == 0) |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
561 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
562 if (! curr_lexer->m_string_text.empty ()) |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
563 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
564 yyless (0); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
565 curr_lexer->m_tok_end = curr_lexer->m_filepos; |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
566 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
567 } |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
568 } |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
569 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
570 curr_lexer->m_string_text += yytext; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
571 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
572 curr_lexer->m_filepos.increment_column (yyleng); |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
573 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
574 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
575 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
576 // Everything else is slurped into the command arguments. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
577 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
578 |
18234 | 579 <COMMAND_START>([\.]|[^#% \t\r\n\.\,\;\"\'\(\[\{\}\]\)]*) { |
18458
ebb878596bcf
Restore escaped backslashes accidentally deleted by cset af8a70d6885c
Mike Miller <mtmiller@ieee.org>
parents:
18437
diff
changeset
|
580 curr_lexer->lexer_debug ("<COMMAND_START>([\\.]|[^#% \\t\\r\\n\\.\\,\\;\\\"\\'\\(\\[\\{\\}\\]\\)]*"); |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
581 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
582 curr_lexer->m_string_text += yytext; |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
583 curr_lexer->m_filepos.increment_column (yyleng); |
967 | 584 } |
1 | 585 |
28772
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
586 %{ |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
587 // Whitespace inside matrix lists. |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
588 %} |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
589 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
590 <MATRIX_START>{S}* { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
591 curr_lexer->lexer_debug ("<MATRIX_START>{S}*"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
592 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
593 curr_lexer->m_filepos.increment_column (yyleng); |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
594 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
595 curr_lexer->mark_previous_token_trailing_space (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
596 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
597 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
598 <MATRIX_START>{NL} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
599 curr_lexer->lexer_debug ("<MATRIX_START>{NL}"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
600 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
601 curr_lexer->m_filepos.next_line (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
602 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
603 if (curr_lexer->m_nesting_level.is_paren ()) |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
604 curr_lexer->warn_language_extension ("bare newline inside parentheses"); |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
605 else |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
606 { |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
607 int tok = curr_lexer->previous_token_value (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
608 |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
609 if (! (tok == ';' || tok == '[' || tok == '{')) |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
610 curr_lexer->xunput (';'); |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
611 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
612 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
613 |
968 | 614 %{ |
28772
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
615 // Continuation lines in matrix constants are handled as whitespace. |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
616 // Allow arbitrary text after the continuation marker. |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
617 %} |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
618 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
619 <MATRIX_START>\.\.\.{ANY_EXCEPT_NL}*{NL} { |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
620 curr_lexer->lexer_debug ("<MATRIX_START>\\.\\.\\.{ANY_EXCEPT_NL}*{NL}"); |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
621 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
622 curr_lexer->handle_continuation (); |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
623 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
624 // Even if there wasn't a space before or after the continuation |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
625 // marker, treat the continuation as if it were. But since it will |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
626 // be transformed to a separator later anyway, there's no need to |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
627 // actually unput a space on the input stream. |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
628 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
629 curr_lexer->mark_previous_token_trailing_space (); |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
630 } |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
631 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
632 %{ |
1 | 633 // 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
|
634 // need to know if the next token is '=' or '=='. |
1 | 635 // |
636 // It would have been so much easier if the delimiters were simply | |
637 // different for the expression on the left hand side of the equals | |
638 // operator. | |
971 | 639 // |
640 // It's also a pain in the ass to decide whether to insert a comma | |
641 // after seeing a ']' character... | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
642 |
17861
870f3e12e163
maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
643 // FIXME: we need to handle block comments here. |
968 | 644 %} |
645 | |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
646 <MATRIX_START>\] { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
647 curr_lexer->lexer_debug ("<MATRIX_START>\\]"); |
8535 | 648 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
649 curr_lexer->update_token_positions (yyleng); |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
650 return curr_lexer->handle_close_bracket (']'); |
4608 | 651 } |
652 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
653 %{ |
17861
870f3e12e163
maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
654 // FIXME: we need to handle block comments here. |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
655 %} |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
656 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
657 <MATRIX_START>\} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
658 curr_lexer->lexer_debug ("<MATRIX_START>\\}*"); |
8535 | 659 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
660 curr_lexer->update_token_positions (yyleng); |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
661 return curr_lexer->handle_close_bracket ('}'); |
967 | 662 } |
1 | 663 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
664 \[ { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
665 curr_lexer->lexer_debug ("\\["); |
8535 | 666 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
667 bool unput_comma = false; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
668 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
669 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
670 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
671 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
672 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
673 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
674 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
675 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
676 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
677 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
678 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
679 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
680 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
681 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
682 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
683 } |
5615 | 684 else |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
685 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
686 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
687 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
688 curr_lexer->m_nesting_level.bracket (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
689 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
690 curr_lexer->m_looking_at_object_index.push_front (false); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
691 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
692 curr_lexer->m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
693 curr_lexer->m_at_beginning_of_statement = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
694 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
695 if (curr_lexer->m_defining_func |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
696 && ! curr_lexer->m_parsed_function_name.top ()) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
697 curr_lexer->m_looking_at_return_list = true; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
698 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
699 curr_lexer->m_looking_at_matrix_or_assign_lhs = true; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
700 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
701 curr_lexer->m_bracketflag++; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
702 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
703 curr_lexer->push_start_state (MATRIX_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
704 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
705 return curr_lexer->count_token ('['); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
706 } |
967 | 707 } |
1 | 708 |
968 | 709 \] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
710 curr_lexer->lexer_debug ("\\]"); |
8535 | 711 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
712 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
713 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
714 curr_lexer->m_nesting_level.remove (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
715 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
716 curr_lexer->m_looking_at_object_index.pop_front (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
717 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
718 curr_lexer->m_looking_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
719 curr_lexer->m_at_beginning_of_statement = false; |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
720 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
721 return curr_lexer->handle_token (']'); |
968 | 722 } |
723 | |
724 %{ | |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
725 // Gobble comments. Both BLOCK_COMMENT_START and LINE_COMMENT_START |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
726 // are exclusive start states. We try to grab a continuous series of |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
727 // line-oriented comments as a single collection of comments. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
728 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
729 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
730 %{ |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
731 // Start of a block comment. Since comment start states are exclusive, |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
732 // this pattern will not match a block comment that immediately follows |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
733 // a line-oriented comment. All we need to do is push the matched text |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
734 // back on the input stream and push the new start state. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
735 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
736 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
737 ^{S}*{CCHAR}\{{S}*{NL} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
738 curr_lexer->lexer_debug ("^{S}*{CCHAR}\\{{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
739 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
740 yyless (0); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
741 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
742 curr_lexer->push_start_state (BLOCK_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
743 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
744 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
745 <BLOCK_COMMENT_START>^{S}*{CCHAR}\{{S}*{NL} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
746 curr_lexer->lexer_debug ("<BLOCK_COMMENT_START>^{S}*{CCHAR}\\{{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
747 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
748 curr_lexer->m_filepos.next_line (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
749 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
750 if (curr_lexer->m_block_comment_nesting_level) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
751 curr_lexer->m_comment_text = "\n"; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
752 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
753 curr_lexer->m_block_comment_nesting_level++; |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
754 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
755 HANDLE_EOB_OR_EOF (-1); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
756 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
757 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
758 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
759 // End of a block comment. If this block comment is nested inside |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
760 // another, wait for the outermost block comment to be closed before |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
761 // storing the comment. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
762 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
763 // NOTE: This pattern must appear before the one below. Both may match |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
764 // the same text and this one should take precedence over the one that |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
765 // follows. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
766 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
767 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
768 <BLOCK_COMMENT_START>^{S}*{CCHAR}\}{S}*{NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
769 curr_lexer->lexer_debug ("<BLOCK_COMMENT_START>^{S}*{CCHAR}\\}{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
770 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
771 curr_lexer->m_filepos.next_line (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
772 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
773 if (curr_lexer->m_block_comment_nesting_level > 1) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
774 curr_lexer->m_comment_text = "\n"; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
775 else |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
776 curr_lexer->finish_comment (octave::comment_elt::block); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
777 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
778 curr_lexer->m_block_comment_nesting_level--; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
779 |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
780 int status = -1; |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
781 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
782 if (curr_lexer->m_block_comment_nesting_level == 0) |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
783 { |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
784 status = -2; |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
785 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
786 curr_lexer->pop_start_state (); |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
787 } |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
788 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
789 HANDLE_EOB_OR_EOF (status); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
790 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
791 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
792 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
793 // Body of a block comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
794 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
795 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
796 <BLOCK_COMMENT_START>{ANY_EXCEPT_NL}*{NL} { |
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
797 curr_lexer->lexer_debug ("<BLOCK_COMMENT_START>{ANY_EXCEPT_NL}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
798 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
799 curr_lexer->m_filepos.next_line (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
800 curr_lexer->m_comment_text += yytext; |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
801 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
802 HANDLE_EOB_OR_EOF (-1); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
803 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
804 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
805 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
806 // Full-line or end-of-line comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
807 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
808 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
809 {S}*{CCHAR}{ANY_EXCEPT_NL}*{NL} { |
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
810 curr_lexer->lexer_debug ("{S}*{CCHAR}{ANY_EXCEPT_NL}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
811 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
812 curr_lexer->push_start_state (LINE_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
813 yyless (0); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
814 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
815 |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
816 %{ |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
817 // Beginning of a block comment while we are looking at a series of |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
818 // line-oriented comments. Finish previous comment, push current |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
819 // text back on input stream, and switch start states. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
820 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
821 // NOTE: This pattern must appear before the one below. Both may match |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
822 // the same text and this one should take precedence over the one that |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
823 // follows. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
824 %} |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
825 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
826 <LINE_COMMENT_START>^{S}*{CCHAR}\{{S}*{NL} { |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
827 curr_lexer->lexer_debug ("<LINE_COMMENT_START>^{S}*{CCHAR}\\{{S}*{NL}"); |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
828 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
829 if (! curr_lexer->m_comment_text.empty ()) |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
830 curr_lexer->finish_comment (octave::comment_elt::full_line); |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
831 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
832 curr_lexer->pop_start_state (); |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
833 curr_lexer->push_start_state (BLOCK_COMMENT_START); |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
834 yyless (0); |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
835 } |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
836 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
837 %{ |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
838 // Line-oriented comment. If we are at the beginning of a line, this is |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
839 // part of a series of full-line comments. Otherwise, this is an end of |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
840 // line comment. We don't need to parse the matched text to determine |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
841 // whether we are looking at the start of a block comment as that |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
842 // pattern is handled above. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
843 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
844 // NOTE: This pattern must appear before the one below. Both may match |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
845 // the same text and this one should take precedence over the one that |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
846 // follows. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
847 %} |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
848 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
849 <LINE_COMMENT_START>{S}*{CCHAR}{ANY_EXCEPT_NL}*{NL} { |
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
850 curr_lexer->lexer_debug ("<LINE_COMMENT_START>{S}*{CCHAR}{ANY_EXCEPT_NL}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
851 |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
852 // Grab text of comment without leading space or comment |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
853 // characters. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
854 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
855 std::size_t i = 0; |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
856 while (i < yyleng && is_space_or_tab (yytext[i])) |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
857 i++; |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
858 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
859 bool have_space = (i > 0); |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
860 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
861 while (i < yyleng && (yytext[i] == '#' || yytext[i] == '%')) |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
862 i++; |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
863 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
864 curr_lexer->m_comment_text += &yytext[i]; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
865 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
866 if (curr_lexer->m_filepos.column () == 1) |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
867 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
868 curr_lexer->m_filepos.next_line (); |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
869 } |
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
870 else |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
871 { |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
872 // End of line comment. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
873 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
874 if (have_space) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
875 curr_lexer->mark_previous_token_trailing_space (); |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
876 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
877 curr_lexer->finish_comment (octave::comment_elt::end_of_line); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
878 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
879 curr_lexer->pop_start_state (); |
16337
6bfd8dbd7d3c
don't swallow statements that follow comment lines (bug #38549)
John W. Eaton <jwe@octave.org>
parents:
16334
diff
changeset
|
880 |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
881 // Push the newline character back on the input and skip |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
882 // incrementing the line count so we don't have to duplicate |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
883 // all the possible actions that happen with newlines here. |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
884 |
16337
6bfd8dbd7d3c
don't swallow statements that follow comment lines (bug #38549)
John W. Eaton <jwe@octave.org>
parents:
16334
diff
changeset
|
885 curr_lexer->xunput ('\n'); |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
886 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
887 // The next action should recognize a newline character and set |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
888 // the input column back to 1, but we should try to keep the |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
889 // input column location accurate anyway, so update here. |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
890 curr_lexer->m_filepos.increment_column (yyleng); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
891 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
892 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
893 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
894 %{ |
27760
16e83787f970
fix handling of full line comments at command prompt (bug #57208)
John W. Eaton <jwe@octave.org>
parents:
27736
diff
changeset
|
895 // End of a series of full-line because some other character was |
16e83787f970
fix handling of full line comments at command prompt (bug #57208)
John W. Eaton <jwe@octave.org>
parents:
27736
diff
changeset
|
896 // found on the input stream. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
897 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
898 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
899 <LINE_COMMENT_START>{ANY_INCLUDING_NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
900 curr_lexer->lexer_debug ("<LINE_COMMENT_START>{ANY_INCLUDING_NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
901 |
28264
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
902 if (yytext[0] == '\001') |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
903 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
904 // We are here because we are using the push parser/lexer |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
905 // interface and we hit the end of the input buffer or file. |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
906 // The special ASCII 1 marker is added to the input by |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
907 // push_lexer::fill_flex_buffer. |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
908 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
909 if (curr_lexer->pending_token_count () > 0) |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
910 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
911 // We are in the middle of parsing a command, expresison, |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
912 // etc., so set the return status so that if we are at the |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
913 // end of the buffer we'll continue looking for more input, |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
914 // possibly buffering a series of line oriented comments as |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
915 // a single block. |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
916 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
917 HANDLE_EOB_OR_EOF (-1); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
918 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
919 else |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
920 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
921 // We are not in the process of parsing a command, |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
922 // expression, etc., so end any current sequence of comments |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
923 // with this full line comment, pop the start state and |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
924 // return as if we have just finished parsing a complete |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
925 // statement. |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
926 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
927 curr_lexer->finish_comment (octave::comment_elt::full_line); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
928 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
929 curr_lexer->pop_start_state (); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
930 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
931 HANDLE_EOB_OR_EOF (-2); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
932 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
933 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
934 else |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
935 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
936 // End any current sequence of comments, pop the start state, |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
937 // and unput the pending input character that ended the series |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
938 // of comments. |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
939 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
940 curr_lexer->finish_comment (octave::comment_elt::full_line); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
941 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
942 curr_lexer->pop_start_state (); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
943 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
944 curr_lexer->xunput (yytext[0]); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
945 } |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
946 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
947 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
948 %{ |
27578
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
949 // End of file will also end a series of full-line comments. |
17722
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
950 %} |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
951 |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
952 <LINE_COMMENT_START><<EOF>> { |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
953 curr_lexer->lexer_debug ("<LINE_COMMENT_START><<EOF>>"); |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
954 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
955 curr_lexer->finish_comment (octave::comment_elt::full_line); |
17722
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
956 |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
957 curr_lexer->pop_start_state (); |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
958 } |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
959 |
5b0036d89d4a
allow "help dir-name" to work when comment block ends at EOF (bug #40342)
John W. Eaton <jwe@octave.org>
parents:
17693
diff
changeset
|
960 %{ |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
961 // Double-quoted character strings. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
962 %} |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
963 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
964 <DQ_STRING_START>\"\" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
965 curr_lexer->lexer_debug ("<DQ_STRING_START>\\\"\\\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
966 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
967 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
968 curr_lexer->m_string_text += '"'; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
969 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
970 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
971 <DQ_STRING_START>\" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
972 curr_lexer->lexer_debug ("<DQ_STRING_START>\\\""); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
973 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
974 // m_tok_beg was set when we started parsing the string. |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
975 curr_lexer->m_tok_end = curr_lexer->m_filepos; |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
976 curr_lexer->m_filepos.increment_column (); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
977 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
978 curr_lexer->pop_start_state (); |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
979 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
980 if (curr_lexer->start_state() != COMMAND_START) |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
981 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
982 curr_lexer->m_looking_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
983 curr_lexer->m_at_beginning_of_statement = false; |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
984 |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
985 curr_lexer->push_token (new octave::token (DQ_STRING, |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
986 curr_lexer->m_string_text, |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
987 curr_lexer->m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
988 curr_lexer->m_tok_end)); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
989 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
990 curr_lexer->m_string_text = ""; |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
991 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
992 return curr_lexer->count_token_internal (DQ_STRING); |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
993 } |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
994 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
995 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
996 <DQ_STRING_START>\\[0-7]{1,3} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
997 curr_lexer->lexer_debug ("<DQ_STRING_START>\\\\[0-7]{1,3}"); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
998 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
999 curr_lexer->update_token_positions (yyleng); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1000 |
26450
af7faef288ad
lex.ll: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
1001 unsigned int result; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1002 sscanf (yytext+1, "%o", &result); |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1003 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1004 if (result > 0xff) |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1005 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1006 // Use location of octal digits for error token. |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1007 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1008 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1009 "invalid octal escape sequence in character string", |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1010 curr_lexer->m_tok_beg, curr_lexer->m_tok_end); |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1011 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1012 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1013 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1014 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1015 } |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1016 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1017 curr_lexer->m_string_text += static_cast<unsigned char> (result); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1018 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1019 |
17244
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1020 <DQ_STRING_START>\\x[0-9a-fA-F]+ { |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1021 curr_lexer->lexer_debug ("<DQ_STRING_START>\\\\x[0-9a-fA-F]+"); |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1022 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1023 curr_lexer->m_filepos.increment_column (yyleng); |
17244
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1024 |
26450
af7faef288ad
lex.ll: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
1025 unsigned int result; |
17244
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1026 sscanf (yytext+2, "%x", &result); |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1027 |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1028 // Truncate the value silently instead of checking the range like |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1029 // we do for octal above. This is to match C/C++ where any number |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1030 // of digits is allowed but the value is implementation-defined if |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1031 // it exceeds the range of the character type. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1032 curr_lexer->m_string_text += static_cast<unsigned char> (result); |
17244
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1033 } |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1034 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1035 <DQ_STRING_START>"\\a" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1036 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\a\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1037 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1038 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1039 curr_lexer->m_string_text += '\a'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1040 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1041 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1042 <DQ_STRING_START>"\\b" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1043 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\b\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1044 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1045 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1046 curr_lexer->m_string_text += '\b'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1047 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1048 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1049 <DQ_STRING_START>"\\f" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1050 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\f\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1051 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1052 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1053 curr_lexer->m_string_text += '\f'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1054 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1055 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1056 <DQ_STRING_START>"\\n" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1057 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\n\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1058 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1059 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1060 curr_lexer->m_string_text += '\n'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1061 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1062 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1063 <DQ_STRING_START>"\\r" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1064 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\r\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1065 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1066 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1067 curr_lexer->m_string_text += '\r'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1068 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1069 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1070 <DQ_STRING_START>"\\t" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1071 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\t\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1072 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1073 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1074 curr_lexer->m_string_text += '\t'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1075 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1076 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1077 <DQ_STRING_START>"\\v" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1078 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\v\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1079 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1080 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1081 curr_lexer->m_string_text += '\v'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1082 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1083 |
18428
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1084 <DQ_STRING_START>(\.\.\.){S}*{NL} { |
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1085 curr_lexer->lexer_debug ("<DQ_STRING_START>(\\.\\.\\.){S}*{NL}"); |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1086 |
29297
cff933892ec2
Deprecate '...' line continuations in double-quoted strings.
Rik <rik@octave.org>
parents:
28774
diff
changeset
|
1087 /* FIXME: Remove support for '...' continuation in Octave 9 */ |
cff933892ec2
Deprecate '...' line continuations in double-quoted strings.
Rik <rik@octave.org>
parents:
28774
diff
changeset
|
1088 static const char *msg = "'...' continuations in double-quoted character strings were deprecated in version 7 and will not be allowed in a future version of Octave; please use '\\' instead"; |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1089 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1090 std::string nm = curr_lexer->m_fcn_file_full_name; |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1091 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1092 if (nm.empty ()) |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1093 warning_with_id ("Octave:deprecated-syntax", "%s", msg); |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1094 else |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1095 warning_with_id ("Octave:deprecated-syntax", |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1096 "%s; near line %d of file '%s'", msg, |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1097 curr_lexer->m_filepos.line (), nm.c_str ()); |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1098 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1099 HANDLE_STRING_CONTINUATION; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1100 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1101 |
18428
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1102 <DQ_STRING_START>\\{S}+{NL} { |
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1103 curr_lexer->lexer_debug ("<DQ_STRING_START>\\\\{S}+{NL}"); |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1104 |
29304
01679f865fc7
Deprecate obsolete warning messages in lex.ll.
Rik <rik@octave.org>
parents:
29298
diff
changeset
|
1105 /* FIXME: Remove support for WS after line continuation in Octave 9 */ |
01679f865fc7
Deprecate obsolete warning messages in lex.ll.
Rik <rik@octave.org>
parents:
29298
diff
changeset
|
1106 static const char *msg = "whitespace after continuation markers in double-quoted character strings were deprecated in version 7 and will not be allowed in a future version of Octave"; |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1107 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1108 std::string nm = curr_lexer->m_fcn_file_full_name; |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1109 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1110 if (nm.empty ()) |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1111 warning_with_id ("Octave:deprecated-syntax", "%s", msg); |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1112 else |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1113 warning_with_id ("Octave:deprecated-syntax", |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1114 "%s; near line %d of file '%s'", msg, |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1115 curr_lexer->m_filepos.line (), nm.c_str ()); |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1116 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1117 HANDLE_STRING_CONTINUATION; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1118 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1119 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1120 <DQ_STRING_START>\\{NL} { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1121 curr_lexer->lexer_debug ("<DQ_STRING_START>\\\\{NL}"); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1122 |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1123 HANDLE_STRING_CONTINUATION; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1124 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1125 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1126 <DQ_STRING_START>\\. { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1127 curr_lexer->lexer_debug ("<DQ_STRING_START>\\\\."); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1128 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1129 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1130 curr_lexer->m_string_text += yytext[1]; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1131 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1132 |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1133 <DQ_STRING_START>\. { |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1134 curr_lexer->lexer_debug ("<DQ_STRING_START>\\."); |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1135 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1136 curr_lexer->m_filepos.increment_column (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1137 curr_lexer->m_string_text += yytext[0]; |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1138 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1139 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1140 <DQ_STRING_START>[^\.\\\r\n\"]+ { |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1141 curr_lexer->lexer_debug ("<DQ_STRING_START>[^\\.\\\\\\r\\n\\\"]+"); |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1142 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1143 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1144 curr_lexer->m_string_text += yytext; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1145 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1146 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1147 <DQ_STRING_START>{NL} { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1148 curr_lexer->lexer_debug ("<DQ_STRING_START>{NL}"); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1149 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1150 // Use current file position for error token. |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1151 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1152 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1153 "unterminated character string constant", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1154 curr_lexer->m_filepos, curr_lexer->m_filepos); |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1155 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1156 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1157 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1158 curr_lexer->m_filepos.next_line (); |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1159 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1160 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1161 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1162 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1163 %{ |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1164 // Single-quoted character strings. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1165 %} |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1166 |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1167 <SQ_STRING_START>\'\' { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1168 curr_lexer->lexer_debug ("<SQ_STRING_START>\\'\\'"); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1169 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1170 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1171 curr_lexer->m_string_text += '\''; |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1172 } |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1173 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1174 <SQ_STRING_START>\' { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1175 curr_lexer->lexer_debug ("<SQ_STRING_START>\\'"); |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1176 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1177 // m_tok_beg was set when we started parsing the string. |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1178 curr_lexer->m_tok_end = curr_lexer->m_filepos; |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1179 curr_lexer->m_filepos.increment_column (); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1180 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1181 curr_lexer->pop_start_state (); |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1182 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1183 if (curr_lexer->start_state() != COMMAND_START) |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1184 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1185 curr_lexer->m_looking_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1186 curr_lexer->m_at_beginning_of_statement = false; |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1187 |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1188 curr_lexer->push_token (new octave::token (SQ_STRING, |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1189 curr_lexer->m_string_text, |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1190 curr_lexer->m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1191 curr_lexer->m_tok_end)); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1192 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1193 curr_lexer->m_string_text = ""; |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1194 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1195 return curr_lexer->count_token_internal (SQ_STRING); |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1196 } |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1197 } |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1198 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1199 <SQ_STRING_START>[^\'\n\r]+ { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1200 curr_lexer->lexer_debug ("<SQ_STRING_START>[^\\'\\n\\r]+"); |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1201 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1202 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1203 curr_lexer->m_string_text += yytext; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1204 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1205 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1206 <SQ_STRING_START>{NL} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1207 curr_lexer->lexer_debug ("<SQ_STRING_START>{NL}"); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1208 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1209 // Use current file position for error token. |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1210 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1211 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1212 "unterminated character string constant", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1213 curr_lexer->m_filepos, curr_lexer->m_filepos); |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1214 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1215 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1216 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1217 curr_lexer->m_filepos.next_line (); |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1218 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1219 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1220 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1221 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1222 %{ |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1223 // Fully-qualified identifiers (used for classdef). |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1224 %} |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1225 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1226 <FQ_IDENT_START>{FQIDENT} { |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1227 curr_lexer->lexer_debug ("<FQ_IDENT_START>{FQIDENT}{S}*"); |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1228 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1229 curr_lexer->pop_start_state (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1230 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1231 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1232 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1233 int id_tok = curr_lexer->handle_fq_identifier (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1234 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1235 if (id_tok >= 0) |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1236 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1237 curr_lexer->m_looking_for_object_index = true; |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1238 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1239 return curr_lexer->count_token_internal (id_tok); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1240 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1241 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1242 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1243 <FQ_IDENT_START>{S}+ { |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1244 curr_lexer->lexer_debug ("<FQ_IDENT_START>{S}+"); |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1245 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1246 curr_lexer->m_filepos.increment_column (yyleng); |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1247 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1248 curr_lexer->mark_previous_token_trailing_space (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1249 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1250 |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1251 <FQ_IDENT_START>(\.\.\.){ANY_EXCEPT_NL}*{NL} { |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1252 curr_lexer->lexer_debug ("<FQ_IDENT_START>(\\.\\.\\.){ANY_EXCEPT_NL}*{NL}"); |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1253 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1254 curr_lexer->m_filepos.next_line (); |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1255 } |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1256 |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1257 <FQ_IDENT_START>{ANY_INCLUDING_NL} { |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1258 curr_lexer->lexer_debug ("<FQ_IDENT_START>{ANY_INCLUDING_NL}"); |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1259 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1260 // If input doesn't match FQIDENT, return char and go to previous |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1261 // start state. |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1262 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1263 yyless (0); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1264 curr_lexer->pop_start_state (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1265 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1266 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1267 {BINARY_NUMBER} { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1268 HANDLE_NUMBER ("{BINARY_NUMBER}", 2); |
968 | 1269 } |
1270 | |
1271 %{ | |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1272 // Decimal numbers. For expressions that are just digits followed |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1273 // directly by an element-by-element operator, don't grab the '.' |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1274 // part of the operator as part of the constant (for example, in an |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1275 // expression like "13./x"). |
968 | 1276 %} |
1277 | |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1278 {DECIMAL_DIGITS}/\.[\*/\\^\'] | |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1279 {DECIMAL_NUMBER} { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1280 HANDLE_NUMBER ("{DECIMAL_DIGITS}/\\.[\\*/\\\\^\\']|{DECIMAL_NUMBER}", 10); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1281 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1282 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1283 {HEXADECIMAL_NUMBER} { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1284 HANDLE_NUMBER ("{HEXADECIMAL_NUMBER}", 16); |
968 | 1285 } |
1286 | |
1287 %{ | |
1288 // Eat whitespace. Whitespace inside matrix constants is handled by | |
4208 | 1289 // the <MATRIX_START> start state code above. |
968 | 1290 %} |
1291 | |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
1292 {S}+ { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1293 curr_lexer->m_filepos.increment_column (yyleng); |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1294 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1295 curr_lexer->mark_previous_token_trailing_space (); |
967 | 1296 } |
1297 | |
968 | 1298 %{ |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1299 // Continuation lines. Allow arbitrary text after continuations. |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1300 %} |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1301 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
1302 \.\.\.{ANY_EXCEPT_NL}*{NL} { |
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
1303 curr_lexer->lexer_debug ("\\.\\.\\.{ANY_EXCEPT_NL}*{NL}"); |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1304 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1305 curr_lexer->handle_continuation (); |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1306 } |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1307 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1308 %{ |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1309 // Deprecated C preprocessor style continuation markers. |
968 | 1310 %} |
1311 | |
17246
8be8a65d3ca8
Ignore anything after the continuation marker '...' (bug #38653)
Stefan Mahr <dac922@gmx.de>
parents:
17244
diff
changeset
|
1312 \\{S}*{NL} | |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
1313 \\{S}*{CCHAR}{ANY_EXCEPT_NL}*{NL} { |
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
1314 curr_lexer->lexer_debug ("\\\\{S}*{NL}|\\\\{S}*{CCHAR}{ANY_EXCEPT_NL}*{NL}"); |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1315 |
29304
01679f865fc7
Deprecate obsolete warning messages in lex.ll.
Rik <rik@octave.org>
parents:
29298
diff
changeset
|
1316 /* FIXME: Remove support for '\\' line continuation in Octave 9 */ |
01679f865fc7
Deprecate obsolete warning messages in lex.ll.
Rik <rik@octave.org>
parents:
29298
diff
changeset
|
1317 static const char *msg = "using continuation marker \\ outside of double quoted strings was deprecated in version 7 and will be removed from a future version of Octave, use ... instead"; |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1318 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1319 std::string nm = curr_lexer->m_fcn_file_full_name; |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1320 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1321 if (nm.empty ()) |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1322 warning_with_id ("Octave:deprecated-syntax", "%s", msg); |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1323 else |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1324 warning_with_id ("Octave:deprecated-syntax", |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1325 "%s; near line %d of file '%s'", msg, |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1326 curr_lexer->m_filepos.line (), nm.c_str ()); |
17343
6470a113eae2
correctly handle deprecated \ continuation markers
John W. Eaton <jwe@octave.org>
parents:
17247
diff
changeset
|
1327 |
6470a113eae2
correctly handle deprecated \ continuation markers
John W. Eaton <jwe@octave.org>
parents:
17247
diff
changeset
|
1328 curr_lexer->handle_continuation (); |
967 | 1329 } |
1 | 1330 |
968 | 1331 %{ |
1332 // End of file. | |
1333 %} | |
1334 | |
967 | 1335 <<EOF>> { |
16164
c5bfdc4c0963
move end_of_input flag from octve_parser class to octave_lexer class
John W. Eaton <jwe@octave.org>
parents:
16158
diff
changeset
|
1336 return curr_lexer->handle_end_of_input (); |
967 | 1337 } |
1 | 1338 |
968 | 1339 %{ |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
1340 // Identifiers. |
18394
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1341 |
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1342 // Don't allow get and set to be recognized as keywords if they are |
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1343 // followed by "(". |
968 | 1344 %} |
1345 | |
21705
764e586dca4b
Avoid use of REJECT in parser (bug #45947).
Rik <rik@octave.org>
parents:
21635
diff
changeset
|
1346 (set|get){S}*\( { |
21722
fb5dd9f7d697
* oct-parse.in.yy: Correct pattern string in call to HANDLE_IDENTIFIER.
John W. Eaton <jwe@octave.org>
parents:
21705
diff
changeset
|
1347 HANDLE_IDENTIFIER ("(set|get){S}*\\(", true); |
18394
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1348 } |
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1349 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1350 {IDENT} { |
18394
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1351 HANDLE_IDENTIFIER ("{IDENT}", false); |
967 | 1352 } |
1 | 1353 |
968 | 1354 %{ |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1355 // Superclass method identifiers. |
9476 | 1356 %} |
1357 | |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1358 {FQIDENT}{S}*@{S}*{FQIDENT} { |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1359 curr_lexer->lexer_debug ("{FQIDENT}{S}*@{S}*{FQIDENT}"); |
9476 | 1360 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1361 if (curr_lexer->previous_token_may_be_command ()) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1362 { |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1363 yyless (0); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1364 curr_lexer->push_start_state (COMMAND_START); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1365 } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1366 else |
9476 | 1367 { |
26899
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1368 if (curr_lexer->m_at_beginning_of_statement) |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1369 { |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1370 std::string txt = yytext; |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1371 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1372 std::size_t at_or_dot_pos = txt.find_first_of ("@."); |
26899
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1373 |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1374 if (at_or_dot_pos != std::string::npos) |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1375 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1376 std::size_t spc_pos = txt.find_first_of (" \t"); |
26899
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1377 |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1378 if (spc_pos != std::string::npos && spc_pos < at_or_dot_pos) |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1379 { |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1380 yyless (spc_pos); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1381 curr_lexer->m_filepos.increment_column (spc_pos); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1382 |
26899
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1383 return curr_lexer->handle_identifier (); |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1384 } |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1385 } |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1386 } |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1387 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1388 curr_lexer->m_looking_for_object_index = true; |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1389 curr_lexer->m_at_beginning_of_statement = false; |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1390 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1391 return curr_lexer->handle_superclass_identifier (); |
9476 | 1392 } |
1393 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1394 |
9476 | 1395 %{ |
1396 // Metaclass query | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1397 %} |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1398 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1399 \?{S}*{FQIDENT} { |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1400 curr_lexer->lexer_debug ("\\?{S}*{FQIDENT}"); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1401 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1402 if (curr_lexer->previous_token_may_be_command () |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1403 && curr_lexer->space_follows_previous_token ()) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1404 { |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1405 yyless (0); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1406 curr_lexer->push_start_state (COMMAND_START); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1407 } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1408 else |
9476 | 1409 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1410 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1411 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1412 int id_tok = curr_lexer->handle_meta_identifier (); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1413 |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1414 if (id_tok >= 0) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1415 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1416 curr_lexer->m_looking_for_object_index = true; |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1417 |
16683
e1c6ad54259f
maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
diff
changeset
|
1418 return curr_lexer->count_token_internal (id_tok); |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1419 } |
9476 | 1420 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1421 } |
9476 | 1422 |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1423 \@ | |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1424 \@{S}*{FQIDENT} { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1425 curr_lexer->lexer_debug ("\\@|\\@{S}*{FQIDENT}"); |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1426 |
16334
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1427 if (curr_lexer->previous_token_may_be_command () |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1428 && curr_lexer->space_follows_previous_token ()) |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1429 { |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1430 yyless (0); |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1431 curr_lexer->push_start_state (COMMAND_START); |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1432 } |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1433 else |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1434 { |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1435 int tok_val = curr_lexer->previous_token_value (); |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1436 |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1437 if (curr_lexer->whitespace_is_significant () |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1438 && curr_lexer->space_follows_previous_token () |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1439 && ! (tok_val == '[' || tok_val == '{' |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1440 || curr_lexer->previous_token_is_binop ())) |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1441 { |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1442 yyless (0); |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
1443 curr_lexer->xunput (','); |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1444 } |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1445 else |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1446 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1447 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1448 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1449 curr_lexer->m_at_beginning_of_statement = false; |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1450 |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1451 std::string ident = yytext; |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1452 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1453 if (ident == "@") |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1454 { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1455 curr_lexer->m_looking_at_function_handle++; |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1456 curr_lexer->m_looking_for_object_index = false; |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1457 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1458 return curr_lexer->count_token ('@'); |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1459 } |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1460 else |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1461 { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1462 ident = ident.substr (1); |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1463 ident.erase (std::remove_if (ident.begin (), ident.end (), |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1464 is_space_or_tab), ident.end ()); |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1465 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1466 octave::token *tok; |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1467 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
1468 if (octave::iskeyword (ident)) |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1469 tok = new octave::token (LEXICAL_ERROR, |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1470 "function handles may not refer to keywords", |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1471 curr_lexer->m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1472 curr_lexer->m_tok_end); |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1473 else |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1474 { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1475 curr_lexer->m_looking_for_object_index = true; |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1476 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1477 tok = new octave::token (FCN_HANDLE, ident, |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1478 curr_lexer->m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1479 curr_lexer->m_tok_end); |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1480 } |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1481 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1482 curr_lexer->push_token (tok); |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1483 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1484 return curr_lexer->count_token_internal (tok->token_value ()); |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1485 } |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1486 } |
16334
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1487 } |
4342 | 1488 } |
1489 | |
1490 %{ | |
968 | 1491 // A new line character. New line characters inside matrix constants |
4208 | 1492 // are handled by the <MATRIX_START> start state code above. If closest |
985 | 1493 // nesting is inside parentheses, don't return a row separator. |
968 | 1494 %} |
1495 | |
967 | 1496 {NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1497 curr_lexer->lexer_debug ("{NL}"); |
8535 | 1498 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1499 if (curr_lexer->m_nesting_level.is_paren ()) |
16309
e608de76742c
allow newline to terminate anonymous function definition
John W. Eaton <jwe@octave.org>
parents:
16299
diff
changeset
|
1500 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1501 curr_lexer->m_filepos.next_line (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1502 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1503 curr_lexer->m_at_beginning_of_statement = false; |
21102
dfcb9d74b253
Rename local gripe_XXX functions to err_XXX or warn_XXX.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
1504 curr_lexer->warn_language_extension |
16309
e608de76742c
allow newline to terminate anonymous function definition
John W. Eaton <jwe@octave.org>
parents:
16299
diff
changeset
|
1505 ("bare newline inside parentheses"); |
e608de76742c
allow newline to terminate anonymous function definition
John W. Eaton <jwe@octave.org>
parents:
16299
diff
changeset
|
1506 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1507 else if (curr_lexer->m_nesting_level.none () |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1508 || curr_lexer->m_nesting_level.is_anon_fcn_body ()) |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
1509 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1510 curr_lexer->update_token_positions (yyleng); |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1511 curr_lexer->m_filepos.next_line (); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1512 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1513 curr_lexer->m_at_beginning_of_statement = true; |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1514 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1515 return curr_lexer->count_token ('\n'); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
1516 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1517 else if (curr_lexer->m_nesting_level.is_bracket_or_brace ()) |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1518 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1519 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1520 curr_lexer->m_filepos.next_line (); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1521 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1522 // Use current file position for error token. |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1523 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1524 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1525 "unexpected internal lexer error", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1526 curr_lexer->m_filepos, curr_lexer->m_filepos); |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1527 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1528 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1529 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1530 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1531 } |
967 | 1532 } |
1 | 1533 |
968 | 1534 %{ |
1535 // 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
|
1536 // operator. |
968 | 1537 %} |
1538 | |
967 | 1539 "'" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1540 curr_lexer->lexer_debug ("'"); |
8535 | 1541 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1542 if (curr_lexer->previous_token_may_be_command () |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1543 && curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1544 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1545 curr_lexer->m_filepos.increment_column (); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1546 curr_lexer->push_start_state (COMMAND_START); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1547 curr_lexer->begin_string (SQ_STRING_START); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1548 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1549 else if (curr_lexer->m_at_beginning_of_statement) |
16681
d3619d4d267c
recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents:
16680
diff
changeset
|
1550 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1551 curr_lexer->m_filepos.increment_column (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1552 curr_lexer->begin_string (SQ_STRING_START); |
16681
d3619d4d267c
recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents:
16680
diff
changeset
|
1553 } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1554 else |
967 | 1555 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1556 int tok = curr_lexer->previous_token_value (); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1557 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1558 if (curr_lexer->whitespace_is_significant ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1559 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1560 if (curr_lexer->space_follows_previous_token ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1561 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1562 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1563 || curr_lexer->previous_token_is_binop ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1564 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1565 curr_lexer->m_filepos.increment_column (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1566 curr_lexer->begin_string (SQ_STRING_START); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1567 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1568 else |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1569 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1570 yyless (0); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1571 curr_lexer->xunput (','); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1572 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1573 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1574 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1575 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1576 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1577 || curr_lexer->previous_token_is_binop () |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1578 || curr_lexer->previous_token_is_keyword ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1579 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1580 curr_lexer->m_filepos.increment_column (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1581 curr_lexer->begin_string (SQ_STRING_START); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1582 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1583 else |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1584 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1585 curr_lexer->m_filepos.increment_column (); |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1586 return curr_lexer->count_token (HERMITIAN); |
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1587 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1588 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1589 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1590 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1591 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1592 if (! tok || tok == '[' || tok == '{' || tok == '(' |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1593 || curr_lexer->previous_token_is_binop () |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1594 || curr_lexer->previous_token_is_keyword ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1595 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1596 curr_lexer->m_filepos.increment_column (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1597 curr_lexer->begin_string (SQ_STRING_START); |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1598 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1599 else |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1600 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1601 curr_lexer->m_filepos.increment_column (); |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1602 return curr_lexer->count_token (HERMITIAN); |
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1603 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1604 } |
967 | 1605 } |
1606 } | |
1 | 1607 |
968 | 1608 %{ |
971 | 1609 // Double quotes always begin strings. |
1610 %} | |
1611 | |
973 | 1612 \" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1613 curr_lexer->lexer_debug ("\\\""); |
8535 | 1614 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1615 if (curr_lexer->previous_token_may_be_command () |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1616 && curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1617 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1618 curr_lexer->m_filepos.increment_column (); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1619 curr_lexer->push_start_state (COMMAND_START); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1620 curr_lexer->begin_string (DQ_STRING_START); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1621 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1622 else |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1623 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1624 int tok = curr_lexer->previous_token_value (); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1625 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1626 if (curr_lexer->whitespace_is_significant ()) |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1627 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1628 if (curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1629 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1630 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1631 || curr_lexer->previous_token_is_binop ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1632 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1633 curr_lexer->m_filepos.increment_column (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1634 curr_lexer->begin_string (DQ_STRING_START); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1635 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1636 else |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1637 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1638 yyless (0); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1639 curr_lexer->xunput (','); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1640 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1641 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1642 else |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1643 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1644 curr_lexer->m_filepos.increment_column (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1645 curr_lexer->begin_string (DQ_STRING_START); |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1646 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1647 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1648 else |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1649 { |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1650 curr_lexer->m_filepos.increment_column (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1651 curr_lexer->begin_string (DQ_STRING_START); |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1652 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1653 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1654 } |
971 | 1655 |
1656 %{ | |
968 | 1657 // Other operators. |
1658 %} | |
1659 | |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1660 ":" { CMD_OR_OP (":", ':', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1661 ".+" { CMD_OR_OP (".+", EPLUS, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1662 ".-" { CMD_OR_OP (".-", EMINUS, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1663 ".*" { CMD_OR_OP (".*", EMUL, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1664 "./" { CMD_OR_OP ("./", EDIV, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1665 ".\\" { CMD_OR_OP (".\\", ELEFTDIV, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1666 ".^" { CMD_OR_OP (".^", EPOW, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1667 ".**" { CMD_OR_OP (".**", EPOW, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1668 "<=" { CMD_OR_OP ("<=", EXPR_LE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1669 "==" { CMD_OR_OP ("==", EXPR_EQ, true); } |
27975
6931d95d1967
Use "!=" in preference to "~=" everywhere in code.
Rik <rik@octave.org>
parents:
27925
diff
changeset
|
1670 "!=" { CMD_OR_OP ("!=", EXPR_NE, false); } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1671 "~=" { CMD_OR_OP ("~=", EXPR_NE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1672 ">=" { CMD_OR_OP (">=", EXPR_GE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1673 "&" { CMD_OR_OP ("&", EXPR_AND, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1674 "|" { CMD_OR_OP ("|", EXPR_OR, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1675 "<" { CMD_OR_OP ("<", EXPR_LT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1676 ">" { CMD_OR_OP (">", EXPR_GT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1677 "*" { CMD_OR_OP ("*", '*', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1678 "/" { CMD_OR_OP ("/", '/', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1679 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1680 %{ |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1681 // In Matlab, '\' may also trigger command syntax. |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1682 %} |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1683 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1684 "\\" { |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1685 curr_lexer->lexer_debug ("\\"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1686 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1687 return curr_lexer->handle_op (LEFTDIV); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1688 } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1689 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1690 "^" { CMD_OR_OP ("^", POW, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1691 "**" { CMD_OR_OP ("**", POW, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1692 "&&" { CMD_OR_OP ("&&", EXPR_AND_AND, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1693 "||" { CMD_OR_OP ("||", EXPR_OR_OR, true); } |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1694 |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1695 ";" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1696 curr_lexer->lexer_debug (";"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1697 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1698 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1699 = (! (curr_lexer->whitespace_is_significant () |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1700 || curr_lexer->m_looking_at_object_index.front ())); |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1701 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1702 return curr_lexer->handle_op (';', at_beginning_of_statement); |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1703 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1704 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1705 "+" { CMD_OR_UNARY_OP ("+", '+', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1706 "-" { CMD_OR_UNARY_OP ("-", '-', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1707 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1708 "~" { CMD_OR_UNARY_OP ("~", EXPR_NOT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1709 "!" { CMD_OR_UNARY_OP ("!", EXPR_NOT, false); } |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1710 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1711 "," { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1712 curr_lexer->lexer_debug (","); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1713 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1714 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1715 = (! (curr_lexer->whitespace_is_significant () |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1716 || curr_lexer->m_looking_at_object_index.front ())); |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1717 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1718 return curr_lexer->handle_op (',', at_beginning_of_statement); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1719 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1720 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1721 ".'" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1722 curr_lexer->lexer_debug (".'"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1723 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1724 return curr_lexer->handle_op (TRANSPOSE); |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1725 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1726 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1727 "++" { CMD_OR_UNARY_OP ("++", PLUS_PLUS, false); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1728 "--" { CMD_OR_UNARY_OP ("--", MINUS_MINUS, false); } |
1 | 1729 |
967 | 1730 "(" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1731 curr_lexer->lexer_debug ("("); |
8535 | 1732 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1733 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1734 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1735 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1736 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1737 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1738 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1739 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1740 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1741 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1742 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1743 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1744 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1745 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1746 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1747 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1748 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1749 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1750 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1751 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1752 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1753 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1754 // If we are looking for an object index, then push TRUE for |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1755 // m_looking_at_object_index. Otherwise, just push whatever state |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1756 // is current (so that we can pop it off the stack when we find |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1757 // the matching close paren). |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1758 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1759 curr_lexer->m_looking_at_object_index.push_front |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1760 (curr_lexer->m_looking_for_object_index); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1761 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1762 curr_lexer->m_looking_at_indirect_ref = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1763 curr_lexer->m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1764 curr_lexer->m_at_beginning_of_statement = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1765 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1766 curr_lexer->m_nesting_level.paren (); |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1767 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1768 return curr_lexer->handle_token ('('); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1769 } |
967 | 1770 } |
1771 | |
1772 ")" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1773 curr_lexer->lexer_debug (")"); |
8535 | 1774 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1775 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1776 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1777 curr_lexer->m_nesting_level.remove (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1778 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1779 curr_lexer->m_looking_at_object_index.pop_front (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1780 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1781 curr_lexer->m_looking_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1782 curr_lexer->m_at_beginning_of_statement = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1783 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1784 if (curr_lexer->m_looking_at_anon_fcn_args) |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1785 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1786 curr_lexer->m_looking_at_anon_fcn_args = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1787 curr_lexer->m_nesting_level.anon_fcn_body (); |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1788 } |
13237
1bfca2bbea8b
fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents:
12801
diff
changeset
|
1789 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1790 return curr_lexer->count_token (')'); |
967 | 1791 } |
1792 | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1793 "." { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1794 curr_lexer->lexer_debug ("."); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1795 |
16325
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1796 if (curr_lexer->previous_token_may_be_command () |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1797 && curr_lexer->space_follows_previous_token ()) |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1798 { |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1799 yyless (0); |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1800 curr_lexer->push_start_state (COMMAND_START); |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1801 } |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1802 else |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1803 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1804 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1805 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1806 curr_lexer->m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1807 curr_lexer->m_at_beginning_of_statement = false; |
16325
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1808 |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1809 return curr_lexer->handle_token ('.'); |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1810 } |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1811 } |
8535 | 1812 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1813 %{ |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1814 // = and op= operators. |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1815 %} |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1816 |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1817 "=" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1818 curr_lexer->lexer_debug ("="); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1819 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1820 return curr_lexer->handle_op ('='); |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1821 } |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1822 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1823 "+=" { CMD_OR_COMPUTED_ASSIGN_OP ("+=", ADD_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1824 "-=" { CMD_OR_COMPUTED_ASSIGN_OP ("-=", SUB_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1825 "*=" { CMD_OR_COMPUTED_ASSIGN_OP ("*=", MUL_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1826 "/=" { CMD_OR_COMPUTED_ASSIGN_OP ("/=", DIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1827 "\\=" { CMD_OR_COMPUTED_ASSIGN_OP ("\\=", LEFTDIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1828 ".+=" { CMD_OR_COMPUTED_ASSIGN_OP (".+=", ADD_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1829 ".-=" { CMD_OR_COMPUTED_ASSIGN_OP (".-=", SUB_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1830 ".*=" { CMD_OR_COMPUTED_ASSIGN_OP (".*=", EMUL_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1831 "./=" { CMD_OR_COMPUTED_ASSIGN_OP ("./=", EDIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1832 ".\\=" { CMD_OR_COMPUTED_ASSIGN_OP (".\\=", ELEFTDIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1833 "^=" { CMD_OR_COMPUTED_ASSIGN_OP ("^=", POW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1834 "**=" { CMD_OR_COMPUTED_ASSIGN_OP ("^=", POW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1835 ".^=" { CMD_OR_COMPUTED_ASSIGN_OP (".^=", EPOW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1836 ".**=" { CMD_OR_COMPUTED_ASSIGN_OP (".^=", EPOW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1837 "&=" { CMD_OR_COMPUTED_ASSIGN_OP ("&=", AND_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1838 "|=" { CMD_OR_COMPUTED_ASSIGN_OP ("|=", OR_EQ); } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1839 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1840 %{ |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1841 // In Matlab, '{' may also trigger command syntax. |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1842 %} |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1843 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1844 "{" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1845 curr_lexer->lexer_debug ("{"); |
8535 | 1846 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1847 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1848 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1849 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1850 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1851 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1852 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1853 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1854 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1855 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1856 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1857 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1858 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1859 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1860 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1861 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1862 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1863 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1864 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1865 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1866 curr_lexer->m_nesting_level.brace (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1867 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1868 curr_lexer->m_looking_at_object_index.push_front |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1869 (curr_lexer->m_looking_for_object_index); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1870 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1871 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1872 curr_lexer->m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1873 curr_lexer->m_at_beginning_of_statement = false; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1874 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1875 curr_lexer->m_braceflag++; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1876 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1877 curr_lexer->push_start_state (MATRIX_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1878 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1879 return curr_lexer->count_token ('{'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1880 } |
3351 | 1881 } |
1882 | |
1883 "}" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1884 curr_lexer->lexer_debug ("}"); |
8535 | 1885 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1886 curr_lexer->update_token_positions (yyleng); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1887 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1888 curr_lexer->m_looking_at_object_index.pop_front (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1889 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1890 curr_lexer->m_looking_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1891 curr_lexer->m_at_beginning_of_statement = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1892 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1893 curr_lexer->m_nesting_level.remove (); |
3351 | 1894 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1895 return curr_lexer->handle_token ('}'); |
3351 | 1896 } |
1897 | |
968 | 1898 %{ |
2066 | 1899 // Unrecognized input is a lexical error. |
968 | 1900 %} |
1 | 1901 |
2042 | 1902 . { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1903 curr_lexer->lexer_debug ("."); |
8535 | 1904 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1905 curr_lexer->xunput (yytext[0]); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1906 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1907 int c = curr_lexer->text_yyinput (); |
4248 | 1908 |
16294
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1909 if (c == 1) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1910 return -1; |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1911 else if (c == EOF) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1912 return curr_lexer->handle_end_of_input (); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1913 else |
4240 | 1914 { |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1915 std::ostringstream buf; |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1916 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1917 buf << "invalid character '" |
25646
4d565baa475e
move libinterp/utils functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25443
diff
changeset
|
1918 << octave::undo_string_escape (static_cast<char> (c)) |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1919 << "' (ASCII " << c << ")"; |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1920 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1921 // Use current file position for error token. |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1922 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1923 = new octave::token (LEXICAL_ERROR, buf.str (), |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1924 curr_lexer->m_filepos, curr_lexer->m_filepos); |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1925 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1926 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1927 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1928 curr_lexer->m_filepos.increment_column (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1929 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1930 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
4240 | 1931 } |
2066 | 1932 } |
1 | 1933 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1934 %{ |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1935 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
1936 // Disable these warnings for flex code. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
1937 # pragma GCC diagnostic ignored "-Wold-style-cast" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
1938 # pragma GCC diagnostic ignored "-Wunused-parameter" |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1939 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1940 %} |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1941 |
1 | 1942 %% |
1943 | |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1944 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
1945 // Restore prevailing warning state for remainder of the file. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
1946 # pragma GCC diagnostic pop |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1947 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1948 |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1949 void * |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1950 octave_alloc (yy_size_t size, yyscan_t) |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1951 { |
21942
aab79a1885cc
limit gnulib headers to liboctave/wrappers directory
John W. Eaton <jwe@octave.org>
parents:
21912
diff
changeset
|
1952 return std::malloc (size); |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1953 } |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1954 |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1955 void * |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1956 octave_realloc (void *ptr, yy_size_t size, yyscan_t) |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1957 { |
21942
aab79a1885cc
limit gnulib headers to liboctave/wrappers directory
John W. Eaton <jwe@octave.org>
parents:
21912
diff
changeset
|
1958 return std::realloc (ptr, size); |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1959 } |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1960 |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1961 void |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1962 octave_free (void *ptr, yyscan_t) |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1963 { |
21942
aab79a1885cc
limit gnulib headers to liboctave/wrappers directory
John W. Eaton <jwe@octave.org>
parents:
21912
diff
changeset
|
1964 std::free (ptr); |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1965 } |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1966 |
8447
adab48231a03
make input_line_number work again
John W. Eaton <jwe@octave.org>
parents:
8312
diff
changeset
|
1967 static void |
8535 | 1968 display_character (char c) |
1969 { | |
1970 if (isgraph (c)) | |
1971 std::cerr << c; | |
1972 else | |
1973 switch (c) | |
1974 { | |
1975 case 0: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1976 std::cerr << "NUL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1977 break; |
8535 | 1978 |
1979 case 1: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1980 std::cerr << "SOH"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1981 break; |
8535 | 1982 |
1983 case 2: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1984 std::cerr << "STX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1985 break; |
8535 | 1986 |
1987 case 3: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1988 std::cerr << "ETX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1989 break; |
8535 | 1990 |
1991 case 4: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1992 std::cerr << "EOT"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1993 break; |
8535 | 1994 |
1995 case 5: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1996 std::cerr << "ENQ"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1997 break; |
8535 | 1998 |
1999 case 6: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2000 std::cerr << "ACK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2001 break; |
8535 | 2002 |
2003 case 7: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2004 std::cerr << "\\a"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2005 break; |
8535 | 2006 |
2007 case 8: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2008 std::cerr << "\\b"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2009 break; |
8535 | 2010 |
2011 case 9: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2012 std::cerr << "\\t"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2013 break; |
8535 | 2014 |
2015 case 10: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2016 std::cerr << "\\n"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2017 break; |
8535 | 2018 |
2019 case 11: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2020 std::cerr << "\\v"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2021 break; |
8535 | 2022 |
2023 case 12: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2024 std::cerr << "\\f"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2025 break; |
8535 | 2026 |
2027 case 13: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2028 std::cerr << "\\r"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2029 break; |
8535 | 2030 |
2031 case 14: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2032 std::cerr << "SO"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2033 break; |
8535 | 2034 |
2035 case 15: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2036 std::cerr << "SI"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2037 break; |
8535 | 2038 |
2039 case 16: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2040 std::cerr << "DLE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2041 break; |
8535 | 2042 |
2043 case 17: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2044 std::cerr << "DC1"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2045 break; |
8535 | 2046 |
2047 case 18: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2048 std::cerr << "DC2"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2049 break; |
8535 | 2050 |
2051 case 19: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2052 std::cerr << "DC3"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2053 break; |
8535 | 2054 |
2055 case 20: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2056 std::cerr << "DC4"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2057 break; |
8535 | 2058 |
2059 case 21: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2060 std::cerr << "NAK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2061 break; |
8535 | 2062 |
2063 case 22: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2064 std::cerr << "SYN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2065 break; |
8535 | 2066 |
2067 case 23: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2068 std::cerr << "ETB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2069 break; |
8535 | 2070 |
2071 case 24: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2072 std::cerr << "CAN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2073 break; |
8535 | 2074 |
2075 case 25: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2076 std::cerr << "EM"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2077 break; |
8535 | 2078 |
2079 case 26: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2080 std::cerr << "SUB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2081 break; |
8535 | 2082 |
2083 case 27: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2084 std::cerr << "ESC"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2085 break; |
8535 | 2086 |
2087 case 28: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2088 std::cerr << "FS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2089 break; |
8535 | 2090 |
2091 case 29: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2092 std::cerr << "GS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2093 break; |
8535 | 2094 |
2095 case 30: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2096 std::cerr << "RS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2097 break; |
8535 | 2098 |
2099 case 31: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2100 std::cerr << "US"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2101 break; |
8535 | 2102 |
2103 case 32: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2104 std::cerr << "SPACE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2105 break; |
8535 | 2106 |
2107 case 127: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2108 std::cerr << "DEL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2109 break; |
8535 | 2110 } |
2111 } | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2112 |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2113 DEFUN (iskeyword, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2114 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2115 @deftypefn {} {} iskeyword () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2116 @deftypefnx {} {} iskeyword (@var{name}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2117 Return true if @var{name} is an Octave keyword. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2118 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2119 If @var{name} is omitted, return a list of keywords. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2120 @seealso{isvarname, exist} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2121 @end deftypefn */) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2122 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2123 octave_value retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2124 |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2125 int nargin = args.length (); |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2126 |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2127 if (nargin > 1) |
20798
bb585db6dee2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20773
diff
changeset
|
2128 print_usage (); |
bb585db6dee2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20773
diff
changeset
|
2129 |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2130 if (nargin == 0) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2131 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2132 // Neither set nor get are keywords. See the note in the |
26059
da2bbcf1fbcd
Deprecate C++ function is_keyword in favor of iskeyword for readability.
Rik <rik@octave.org>
parents:
25994
diff
changeset
|
2133 // iskeyword function for additional details. |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2134 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2135 string_vector lst (TOTAL_KEYWORDS); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2136 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2137 int j = 0; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2138 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2139 for (int i = 0; i < TOTAL_KEYWORDS; i++) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2140 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2141 std::string kword = wordlist[i].name; |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2142 |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2143 // FIXME: The following check is duplicated in octave::iskeyword. |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2144 if (! (kword == "set" || kword == "get" || kword == "arguments" |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
2145 || kword == "enumeration" || kword == "events" |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
2146 || kword == "methods" || kword == "properties")) |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2147 lst[j++] = kword; |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2148 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2149 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2150 lst.resize (j); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2151 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2152 retval = Cell (lst.sort ()); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2153 } |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2154 else |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2155 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2156 std::string name = args(0).xstring_value ("iskeyword: NAME must be a string"); |
26059
da2bbcf1fbcd
Deprecate C++ function is_keyword in favor of iskeyword for readability.
Rik <rik@octave.org>
parents:
25994
diff
changeset
|
2157 retval = octave::iskeyword (name); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2158 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2159 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2160 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2161 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2162 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2163 /* |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2164 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2165 %!assert (iskeyword ("for")) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2166 %!assert (iskeyword ("fort"), false) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2167 %!assert (iskeyword ("fft"), false) |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2168 %!assert (iskeyword ("get"), false) |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2169 %!assert (iskeyword ("set"), false) |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2170 |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2171 %!error iskeyword ("A", "B") |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2172 %!error <NAME must be a string> iskeyword (1) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2173 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2174 */ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2175 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2176 namespace octave |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2177 { |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2178 void |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2179 lexical_feedback::symbol_table_context::clear (void) |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2180 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2181 while (! m_frame_stack.empty ()) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2182 m_frame_stack.pop_front (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2183 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2184 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2185 void |
23602
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2186 lexical_feedback::symbol_table_context::pop (void) |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2187 { |
23602
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2188 if (empty ()) |
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2189 panic_impossible (); |
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2190 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2191 m_frame_stack.pop_front (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2192 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2193 |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24356
diff
changeset
|
2194 symbol_scope |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2195 lexical_feedback::symbol_table_context::curr_scope (void) const |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2196 { |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2197 if (empty ()) |
27443
075602880383
store ref to interpreter in lexical_feedback and symbol_table_context classes
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
2198 return m_interpreter.get_current_scope (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2199 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2200 return m_frame_stack.front (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2201 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2202 |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24356
diff
changeset
|
2203 symbol_scope |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2204 lexical_feedback::symbol_table_context::parent_scope (void) const |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2205 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2206 std::size_t sz = size (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2207 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2208 return (sz > 1 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2209 ? m_frame_stack[1] |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2210 : (sz == 1 ? m_frame_stack[0] : symbol_scope ())); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2211 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2212 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2213 lexical_feedback::~lexical_feedback (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2214 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2215 m_tokens.clear (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2216 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2217 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2218 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2219 lexical_feedback::init (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2220 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2221 // The closest paren, brace, or bracket nesting is not an object |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2222 // index. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2223 m_looking_at_object_index.push_front (false); |
29857
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2224 |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2225 // Provide an initial set to store variables at the top-level. |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2226 // Don't clear this one when resetting lexical_feedback state. |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2227 // It should persist since the top-level scope does. Hmm maybe |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2228 // we should just use the symbol scope object for this job? |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2229 m_pending_local_variables.push_front (std::set<std::string> ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2230 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2231 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2232 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2233 lexical_feedback::reset (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2234 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2235 m_end_of_input = false; |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2236 m_allow_command_syntax = true; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2237 m_at_beginning_of_statement = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2238 m_looking_at_anon_fcn_args = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2239 m_looking_at_return_list = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2240 m_looking_at_parameter_list = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2241 m_looking_at_decl_list = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2242 m_looking_at_matrix_or_assign_lhs = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2243 m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2244 m_looking_at_indirect_ref = false; |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2245 m_arguments_is_keyword = false; |
29759
ad1491462d13
allow properties function to be called inside classdef method (bug #60763)
John W. Eaton <jwe@octave.org>
parents:
29727
diff
changeset
|
2246 m_classdef_element_names_are_keywords = false; |
27736
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
2247 m_parsing_anon_fcn_body = false; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2248 m_parsing_class_method = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2249 m_parsing_classdef = false; |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
2250 m_parsing_classdef_decl = false; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
2251 m_parsing_classdef_superclass = false; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2252 m_maybe_classdef_get_set_method = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2253 m_parsing_classdef_get_method = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2254 m_parsing_classdef_set_method = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2255 m_quote_is_transpose = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2256 m_force_script = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2257 m_reading_fcn_file = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2258 m_reading_script_file = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2259 m_reading_classdef_file = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2260 m_buffer_function_text = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2261 m_bracketflag = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2262 m_braceflag = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2263 m_looping = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2264 m_defining_func = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2265 m_looking_at_function_handle = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2266 m_block_comment_nesting_level = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2267 m_command_arg_paren_count = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2268 m_token_count = 0; |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
2269 m_filepos = filepos (); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2270 m_tok_beg = filepos (); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2271 m_tok_end = filepos (); |
27768
d6701f835496
use filepos object to store beginning position of character strings
John W. Eaton <jwe@octave.org>
parents:
27766
diff
changeset
|
2272 m_string_text = ""; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2273 m_current_input_line = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2274 m_comment_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2275 m_help_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2276 m_function_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2277 m_fcn_file_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2278 m_fcn_file_full_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2279 m_dir_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2280 m_package_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2281 m_looking_at_object_index.clear (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2282 m_looking_at_object_index.push_front (false); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2283 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2284 while (! m_parsed_function_name.empty ()) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2285 m_parsed_function_name.pop (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2286 |
29857
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2287 while (m_pending_local_variables.size () > 1) |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2288 m_pending_local_variables.pop_front (); |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2289 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2290 m_symtab_context.clear (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2291 m_nesting_level.reset (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2292 m_tokens.clear (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2293 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2294 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2295 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2296 lexical_feedback::previous_token_value (void) const |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2297 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2298 const token *tok = m_tokens.front (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2299 return tok ? tok->token_value () : 0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2300 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2301 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2302 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2303 lexical_feedback::previous_token_value_is (int tok_val) const |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2304 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2305 const token *tok = m_tokens.front (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2306 return tok ? tok->token_value_is (tok_val) : false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2307 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2308 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2309 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2310 lexical_feedback::mark_previous_token_trailing_space (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2311 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2312 token *tok = m_tokens.front (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2313 if (tok && ! previous_token_value_is ('\n')) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2314 tok->mark_trailing_space (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2315 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2316 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2317 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2318 lexical_feedback::space_follows_previous_token (void) const |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2319 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2320 const token *tok = m_tokens.front (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2321 return tok ? tok->space_follows_token () : false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2322 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2323 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2324 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2325 lexical_feedback::previous_token_is_binop (void) const |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2326 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2327 int tok = previous_token_value (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2328 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2329 return (tok == '+' || tok == '-' || tok == '@' |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2330 || tok == ',' || tok == ';' || tok == '*' || tok == '/' |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2331 || tok == ':' || tok == '=' || tok == ADD_EQ |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2332 || tok == AND_EQ || tok == DIV_EQ || tok == EDIV |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2333 || tok == EDIV_EQ || tok == ELEFTDIV || tok == ELEFTDIV_EQ |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2334 || tok == EMINUS || tok == EMUL || tok == EMUL_EQ |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2335 || tok == EPOW || tok == EPOW_EQ || tok == EXPR_AND |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2336 || tok == EXPR_AND_AND || tok == EXPR_EQ || tok == EXPR_GE |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2337 || tok == EXPR_GT || tok == EXPR_LE || tok == EXPR_LT |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2338 || tok == EXPR_NE || tok == EXPR_NOT || tok == EXPR_OR |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2339 || tok == EXPR_OR_OR || tok == LEFTDIV || tok == LEFTDIV_EQ |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2340 || tok == MUL_EQ || tok == OR_EQ || tok == POW |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2341 || tok == POW_EQ || tok == SUB_EQ); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2342 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2343 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2344 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2345 lexical_feedback::previous_token_is_keyword (void) const |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2346 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2347 const token *tok = m_tokens.front (); |
26059
da2bbcf1fbcd
Deprecate C++ function is_keyword in favor of iskeyword for readability.
Rik <rik@octave.org>
parents:
25994
diff
changeset
|
2348 return tok ? tok->iskeyword () : false; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2349 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2350 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2351 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2352 lexical_feedback::previous_token_may_be_command (void) const |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2353 { |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2354 if (! m_allow_command_syntax) |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2355 return false; |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2356 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2357 const token *tok = m_tokens.front (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2358 return tok ? tok->may_be_command () : false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2359 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2360 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2361 void |
29857
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2362 lexical_feedback::mark_as_variable (const std::string& nm) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2363 { |
29857
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2364 auto& vars = m_pending_local_variables.front (); |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2365 vars.insert (nm); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2366 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2367 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2368 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2369 lexical_feedback::mark_as_variables (const std::list<std::string>& lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2370 { |
29857
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2371 auto& vars = m_pending_local_variables.front (); |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2372 for (const auto& nm : lst) |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2373 vars.insert (nm); |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2374 } |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2375 |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2376 bool |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2377 lexical_feedback::is_variable (const std::string& nm) const |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2378 { |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2379 if (m_interpreter.at_top_level () && m_interpreter.is_variable (nm)) |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2380 return true; |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2381 |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2382 // Search current scope, then parents. |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2383 for (const auto& vars : m_pending_local_variables) |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2384 { |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2385 if (vars.find (nm) != vars.end ()) |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2386 return true; |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2387 } |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2388 |
0b01806bb663
fix command syntax parsing error (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29759
diff
changeset
|
2389 return false; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2390 } |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
2391 } |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
2392 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2393 static bool |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2394 looks_like_copyright (const std::string& s) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2395 { |
27925
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2396 if (s.empty ()) |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2397 return false; |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2398 |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2399 // Comment characters have been stripped but whitespace |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2400 // (including newlines) remains. |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2401 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2402 std::size_t offset = s.find_first_not_of (" \t\n\r"); |
27925
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2403 |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2404 return (offset != std::string::npos |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2405 && (s.substr (offset, 9) == "Copyright" |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2406 || s.substr (offset, 6) == "Author" |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2407 || s.substr (offset, 23) == "SPDX-License-Identifier")); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2408 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2409 |
23555
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2410 static bool |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2411 looks_like_shebang (const std::string& s) |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2412 { |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2413 return ((! s.empty ()) && (s[0] == '!')); |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2414 } |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2415 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2416 namespace octave |
1 | 2417 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2418 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2419 base_lexer::input_buffer::fill (const std::string& input, bool eof_arg) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2420 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2421 m_buffer = input; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2422 m_chars_left = m_buffer.length (); |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2423 m_offset = 0; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2424 m_eof = eof_arg; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2425 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2426 |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2427 // If BY_LINES is true, return chunks to the lexer line by line. |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2428 int |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2429 base_lexer::input_buffer::copy_chunk (char *buf, std::size_t max_size, |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2430 bool by_lines) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2431 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2432 static const char * const eol = "\n"; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2433 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2434 std::size_t len = 0; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2435 if (by_lines) |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2436 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2437 std::size_t newline_pos = m_buffer.find ('\n', m_offset); |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2438 len = (newline_pos != std::string::npos |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2439 ? newline_pos - m_offset + 1 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2440 : (max_size > m_chars_left ? m_chars_left : max_size)); |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2441 } |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2442 else |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2443 len = max_size > m_chars_left ? m_chars_left : max_size; |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2444 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2445 assert (len > 0); |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2446 memcpy (buf, m_buffer.c_str () + m_offset, len); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2447 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2448 m_chars_left -= len; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2449 m_offset += len; |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2450 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2451 // Make sure the final input returned to the lexer ends with a new |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2452 // line character. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2453 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2454 if (m_chars_left == 0 && buf[len-1] != '\n') |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2455 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2456 if (len < max_size) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2457 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2458 // There is enough room to plug the newline character in |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2459 // the buffer. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2460 buf[len++] = '\n'; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2461 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2462 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2463 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2464 // There isn't enough room to plug the newline character |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2465 // in BUF so arrange to have it returned on the next call |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2466 // to base_lexer::read. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2467 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2468 // At this point we've exhausted the original input |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2469 // (m_chars_left is zero) so we can overwrite the initial |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2470 // buffer with a single newline character to be returned on |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2471 // the next call. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2472 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2473 m_buffer = eol; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2474 m_chars_left = 1; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2475 m_offset = 0; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2476 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2477 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2478 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2479 return len; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2480 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2481 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2482 base_lexer::~base_lexer (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2483 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2484 yylex_destroy (m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2485 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2486 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2487 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2488 base_lexer::init (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2489 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2490 yylex_init (&m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2491 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2492 // Make base_lexer object available through yyextra in |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2493 // flex-generated lexer. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2494 yyset_extra (this, m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2495 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2496 clear_start_state (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2497 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2498 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2499 // Inside Flex-generated functions, yyg is the scanner cast to its real |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2500 // type. Some flex macros that we use in base_lexer member functions |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2501 // (for example, BEGIN) use yyg. If we could perform the actions of |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2502 // these macros with functions instead, we could eliminate the |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2503 // OCTAVE_YYG macro. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2504 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2505 #define OCTAVE_YYG \ |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2506 struct yyguts_t *yyg = static_cast<struct yyguts_t*> (m_scanner) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2507 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2508 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2509 base_lexer::reset (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2510 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2511 // Start off on the right foot. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2512 clear_start_state (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2513 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2514 m_symtab_context.clear (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2515 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2516 // Only ask for input from stdin if we are expecting interactive |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2517 // input. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2518 |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27086
diff
changeset
|
2519 if (m_interpreter.interactive () |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2520 && ! (m_reading_fcn_file |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2521 || m_reading_classdef_file |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2522 || m_reading_script_file |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2523 || input_from_eval_string ())) |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2524 yyrestart (stdin, m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2525 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2526 lexical_feedback::reset (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2527 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2528 m_comment_buf.reset (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2529 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2530 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2531 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2532 base_lexer::prep_for_file (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2533 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2534 m_reading_script_file = true; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2535 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2536 push_start_state (INPUT_FILE_START); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2537 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2538 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2539 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2540 base_lexer::begin_string (int state) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2541 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2542 m_tok_beg = m_filepos; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2543 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2544 push_start_state (state); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2545 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2546 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2547 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2548 base_lexer::handle_end_of_input (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2549 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2550 lexer_debug ("<<EOF>>"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2551 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2552 m_tok_beg = m_filepos; |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2553 m_tok_end = m_filepos; |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2554 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2555 if (m_block_comment_nesting_level != 0) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2556 { |
29368
30afb3804d6e
Use clearer warning message when block comment is unterminated at EOF (bug #59874).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
2557 warning ("block comment unterminated at end of input"); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2558 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2559 if ((m_reading_fcn_file || m_reading_script_file || m_reading_classdef_file) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2560 && ! m_fcn_file_name.empty ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2561 warning ("near line %d of file '%s.m'", |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
2562 m_filepos.line (), m_fcn_file_name.c_str ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2563 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2564 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2565 token *tok_val = new token (END_OF_INPUT, m_tok_beg, m_tok_end); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2566 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2567 push_token (tok_val); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2568 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2569 return count_token_internal (END_OF_INPUT); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2570 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2571 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2572 char * |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2573 base_lexer::flex_yytext (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2574 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2575 return yyget_text (m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2576 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2577 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2578 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2579 base_lexer::flex_yyleng (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2580 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2581 return yyget_leng (m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2582 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2583 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2584 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2585 base_lexer::text_yyinput (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2586 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2587 int c = yyinput (m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2588 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2589 if (debug_flag ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2590 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2591 std::cerr << "I: "; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2592 display_character (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2593 std::cerr << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2594 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2595 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2596 // Convert CRLF into just LF and single CR into LF. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2597 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2598 if (c == '\r') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2599 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2600 c = yyinput (m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2601 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2602 if (debug_flag ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2603 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2604 std::cerr << "I: "; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2605 display_character (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2606 std::cerr << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2607 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2608 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2609 if (c != '\n') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2610 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2611 xunput (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2612 c = '\n'; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2613 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2614 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2615 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2616 return c; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2617 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2618 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2619 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2620 base_lexer::xunput (char c, char *buf) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2621 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2622 if (c != EOF) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2623 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2624 if (debug_flag ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2625 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2626 std::cerr << "U: "; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2627 display_character (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2628 std::cerr << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2629 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2630 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2631 yyunput (c, buf, m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2632 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2633 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2634 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2635 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2636 base_lexer::xunput (char c) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2637 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2638 char *yytxt = flex_yytext (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2639 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2640 xunput (c, yytxt); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2641 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2642 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2643 void |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2644 base_lexer::update_token_positions (int tok_len) |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2645 { |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2646 m_tok_beg = m_filepos; |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2647 m_tok_end = m_filepos; |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2648 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2649 if (tok_len > 1) |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2650 m_tok_end.increment_column (tok_len - 1); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2651 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2652 m_filepos.increment_column (tok_len); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2653 } |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2654 |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2655 bool |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2656 base_lexer::looking_at_space (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2657 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2658 int c = text_yyinput (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2659 xunput (c); |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
2660 return is_space_or_tab (c); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2661 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2662 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2663 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2664 base_lexer::inside_any_object_index (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2665 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2666 bool retval = false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2667 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2668 for (const bool is_obj_idx : m_looking_at_object_index) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2669 { |
22872
551ac93c984c
maint: Use C++ range feature to simplify some for loops in libinterp/parse-tree
Rik <rik@octave.org>
parents:
22857
diff
changeset
|
2670 if (is_obj_idx) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2671 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2672 retval = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2673 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2674 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2675 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2676 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2677 return retval; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2678 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2679 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2680 int |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
2681 base_lexer::make_keyword_token (const std::string& s) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2682 { |
28679
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2683 // Token positions should have already been updated before this |
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2684 // function is called. |
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2685 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2686 int slen = s.length (); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2687 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2688 const octave_kw *kw = octave_kw_hash::in_word_set (s.c_str (), slen); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2689 |
27770 | 2690 if (! kw) |
2691 return 0; | |
2692 | |
2693 bool previous_at_bos = m_at_beginning_of_statement; | |
2694 | |
2695 // May be reset to true for some token types. | |
2696 m_at_beginning_of_statement = false; | |
2697 | |
2698 token *tok_val = nullptr; | |
2699 | |
2700 switch (kw->kw_id) | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2701 { |
27770 | 2702 case break_kw: |
2703 case catch_kw: | |
2704 case continue_kw: | |
2705 case else_kw: | |
2706 case otherwise_kw: | |
2707 case return_kw: | |
2708 case unwind_protect_cleanup_kw: | |
2709 m_at_beginning_of_statement = true; | |
2710 break; | |
2711 | |
2712 case persistent_kw: | |
2713 case global_kw: | |
2714 m_looking_at_decl_list = true; | |
2715 break; | |
2716 | |
2717 case case_kw: | |
2718 case elseif_kw: | |
2719 case until_kw: | |
2720 break; | |
2721 | |
2722 case end_kw: | |
2723 if (inside_any_object_index () | |
2724 || (m_defining_func | |
2725 && ! (m_looking_at_return_list | |
2726 || m_parsed_function_name.top ()))) | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2727 { |
27770 | 2728 m_at_beginning_of_statement = previous_at_bos; |
2729 return 0; | |
2730 } | |
2731 | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2732 tok_val = new token (end_kw, token::simple_end, m_tok_beg, m_tok_end); |
27770 | 2733 m_at_beginning_of_statement = true; |
2734 break; | |
2735 | |
2736 case end_try_catch_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2737 tok_val = new token (end_try_catch_kw, token::try_catch_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2738 m_tok_end); |
27770 | 2739 m_at_beginning_of_statement = true; |
2740 break; | |
2741 | |
2742 case end_unwind_protect_kw: | |
2743 tok_val = new token (end_unwind_protect_kw, | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2744 token::unwind_protect_end, m_tok_beg, m_tok_end); |
27770 | 2745 m_at_beginning_of_statement = true; |
2746 break; | |
2747 | |
2748 case endfor_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2749 tok_val = new token (endfor_kw, token::for_end, m_tok_beg, m_tok_end); |
27770 | 2750 m_at_beginning_of_statement = true; |
2751 break; | |
2752 | |
2753 case endfunction_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2754 tok_val = new token (endfunction_kw, token::function_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2755 m_tok_end); |
27770 | 2756 m_at_beginning_of_statement = true; |
2757 break; | |
2758 | |
2759 case endif_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2760 tok_val = new token (endif_kw, token::if_end, m_tok_beg, m_tok_end); |
27770 | 2761 m_at_beginning_of_statement = true; |
2762 break; | |
2763 | |
2764 case endparfor_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2765 tok_val = new token (endparfor_kw, token::parfor_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2766 m_tok_end); |
27770 | 2767 m_at_beginning_of_statement = true; |
2768 break; | |
2769 | |
2770 case endswitch_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2771 tok_val = new token (endswitch_kw, token::switch_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2772 m_tok_end); |
27770 | 2773 m_at_beginning_of_statement = true; |
2774 break; | |
2775 | |
2776 case endwhile_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2777 tok_val = new token (endwhile_kw, token::while_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2778 m_tok_end); |
27770 | 2779 m_at_beginning_of_statement = true; |
2780 break; | |
2781 | |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2782 case endarguments_kw: |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2783 #if defined (DISABLE_ARGUMENTS_VALIDATION_BLOCK) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2784 return 0; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2785 #else |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2786 tok_val = new token (endarguments_kw, token::arguments_end, m_tok_beg, |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2787 m_tok_end); |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2788 m_at_beginning_of_statement = true; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2789 break; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2790 #endif |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2791 |
27770 | 2792 case endclassdef_kw: |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2793 tok_val = new token (endclassdef_kw, token::classdef_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2794 m_tok_end); |
27770 | 2795 m_at_beginning_of_statement = true; |
2796 break; | |
2797 | |
2798 case endenumeration_kw: | |
2799 tok_val = new token (endenumeration_kw, token::enumeration_end, | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2800 m_tok_beg, m_tok_end); |
27770 | 2801 m_at_beginning_of_statement = true; |
2802 break; | |
2803 | |
2804 case endevents_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2805 tok_val = new token (endevents_kw, token::events_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2806 m_tok_end); |
27770 | 2807 m_at_beginning_of_statement = true; |
2808 break; | |
2809 | |
2810 case endmethods_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2811 tok_val = new token (endmethods_kw, token::methods_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2812 m_tok_end); |
27770 | 2813 m_at_beginning_of_statement = true; |
2814 break; | |
2815 | |
2816 case endproperties_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2817 tok_val = new token (endproperties_kw, token::properties_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2818 m_tok_end); |
27770 | 2819 m_at_beginning_of_statement = true; |
2820 break; | |
2821 | |
2822 case for_kw: | |
2823 case parfor_kw: | |
2824 case while_kw: | |
2825 m_looping++; | |
2826 break; | |
2827 | |
2828 case do_kw: | |
2829 m_at_beginning_of_statement = true; | |
2830 m_looping++; | |
2831 break; | |
2832 | |
2833 case try_kw: | |
2834 case unwind_protect_kw: | |
2835 m_at_beginning_of_statement = true; | |
2836 break; | |
2837 | |
2838 case if_kw: | |
2839 case switch_kw: | |
2840 break; | |
2841 | |
2842 case get_kw: | |
2843 case set_kw: | |
2844 // 'get' and 'set' are keywords in classdef method | |
2845 // declarations. | |
2846 if (! m_maybe_classdef_get_set_method) | |
2847 { | |
2848 m_at_beginning_of_statement = previous_at_bos; | |
2849 return 0; | |
2850 } | |
2851 break; | |
2852 | |
2853 case enumeration_kw: | |
2854 case events_kw: | |
2855 case methods_kw: | |
2856 case properties_kw: | |
2857 // 'properties', 'methods' and 'events' are keywords for | |
2858 // classdef blocks. | |
29759
ad1491462d13
allow properties function to be called inside classdef method (bug #60763)
John W. Eaton <jwe@octave.org>
parents:
29727
diff
changeset
|
2859 if (! m_classdef_element_names_are_keywords) |
27770 | 2860 { |
2861 m_at_beginning_of_statement = previous_at_bos; | |
2862 return 0; | |
2863 } | |
2864 // fall through ... | |
2865 | |
2866 case classdef_kw: | |
2867 // 'classdef' is always a keyword. | |
2868 if (! m_force_script && m_token_count == 0 && input_from_file ()) | |
2869 { | |
2870 m_reading_classdef_file = true; | |
2871 m_reading_script_file = false; | |
2872 } | |
2873 break; | |
2874 | |
2875 case function_kw: | |
2876 m_defining_func++; | |
2877 m_parsed_function_name.push (false); | |
2878 | |
2879 if (! m_force_script && m_token_count == 0 && input_from_file ()) | |
2880 { | |
2881 m_reading_fcn_file = true; | |
2882 m_reading_script_file = false; | |
2883 } | |
2884 | |
2885 if (! (m_reading_fcn_file || m_reading_script_file | |
2886 || m_reading_classdef_file)) | |
2887 { | |
2888 // Input must be coming from the terminal or stdin? | |
2889 m_buffer_function_text = true; | |
2890 m_function_text += (m_current_input_line + "\n"); | |
2891 | |
2892 // FIXME: do we need to save and restore the file position | |
2893 // or just reset the line number here? The goal is to | |
2894 // track line info for command-line functions relative | |
2895 // to the function keyword. | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2896 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2897 m_filepos = filepos (); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2898 update_token_positions (slen); |
27770 | 2899 } |
2900 break; | |
2901 | |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2902 case arguments_kw: |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2903 #if defined (DISABLE_ARGUMENTS_VALIDATION_BLOCK) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2904 return 0; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2905 #else |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2906 if (! m_arguments_is_keyword) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2907 return 0; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2908 break; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2909 #endif |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2910 |
28517
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2911 case spmd_kw: |
28522
a5541f5a78dd
make parsing of spmd and endspmd keywords work properly (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28517
diff
changeset
|
2912 m_at_beginning_of_statement = true; |
28517
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2913 break; |
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2914 |
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2915 case endspmd_kw: |
28522
a5541f5a78dd
make parsing of spmd and endspmd keywords work properly (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28517
diff
changeset
|
2916 tok_val = new token (endspmd_kw, token::spmd_end, m_tok_beg, m_tok_end); |
28517
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2917 m_at_beginning_of_statement = true; |
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2918 break; |
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2919 |
27770 | 2920 case magic_file_kw: |
2921 { | |
2922 if ((m_reading_fcn_file || m_reading_script_file | |
2923 || m_reading_classdef_file) | |
2924 && ! m_fcn_file_full_name.empty ()) | |
2925 tok_val = new token (magic_file_kw, m_fcn_file_full_name, | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2926 m_tok_beg, m_tok_end); |
27770 | 2927 else |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2928 tok_val = new token (magic_file_kw, "stdin", m_tok_beg, m_tok_end); |
27770 | 2929 } |
2930 break; | |
2931 | |
2932 case magic_line_kw: | |
2933 { | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2934 int l = m_tok_beg.line (); |
28582
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
2935 octave_value ov_value (static_cast<double> (l)); |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
2936 tok_val = new token (magic_line_kw, ov_value, "", |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
2937 m_tok_beg, m_tok_end); |
27770 | 2938 } |
2939 break; | |
2940 | |
2941 default: | |
2942 panic_impossible (); | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2943 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2944 |
27770 | 2945 if (! tok_val) |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2946 tok_val = new token (kw->tok, true, m_tok_beg, m_tok_end); |
27770 | 2947 |
2948 push_token (tok_val); | |
2949 | |
2950 return kw->tok; | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2951 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2952 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2953 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2954 base_lexer::fq_identifier_contains_keyword (const std::string& s) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2955 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2956 std::size_t p1 = 0; |
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2957 std::size_t p2; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2958 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2959 std::string s_part; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2960 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2961 do |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2962 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2963 p2 = s.find ('.', p1); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2964 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2965 if (p2 != std::string::npos) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2966 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2967 s_part = s.substr (p1, p2 - p1); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2968 p1 = p2 + 1; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2969 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2970 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2971 s_part = s.substr (p1); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2972 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
2973 if (iskeyword (s_part)) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2974 return true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2975 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2976 while (p2 != std::string::npos); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2977 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2978 return false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2979 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2980 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2981 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2982 base_lexer::whitespace_is_significant (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2983 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2984 return (m_nesting_level.is_bracket () |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2985 || (m_nesting_level.is_brace () |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2986 && ! m_looking_at_object_index.front ())); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2987 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2988 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2989 |
3220 | 2990 static inline bool |
20589
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2991 looks_like_bin (const char *s, int len) |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2992 { |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2993 return (len > 2 && s[0] == '0' && (s[1] == 'b' || s[1] == 'B')); |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2994 } |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2995 |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2996 static inline bool |
3220 | 2997 looks_like_hex (const char *s, int len) |
2998 { | |
2999 return (len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')); | |
3000 } | |
3001 | |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3002 static inline octave_value |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3003 make_integer_value (uintmax_t long_int_val, bool unsigned_val, int bytes) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3004 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3005 if (unsigned_val) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3006 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3007 switch (bytes) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3008 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3009 case 1: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3010 return octave_value (octave_uint8 (long_int_val)); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3011 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3012 case 2: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3013 return octave_value (octave_uint16 (long_int_val)); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3014 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3015 case 4: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3016 return octave_value (octave_uint32 (long_int_val)); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3017 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3018 case 8: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3019 return octave_value (octave_uint64 (long_int_val)); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3020 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3021 default: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3022 panic_impossible (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3023 }; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3024 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3025 else |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3026 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3027 // FIXME: Conversion to signed values is supposed to follow |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3028 // twos-complement rules. Do we need to be more carefule here? |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3029 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3030 switch (bytes) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3031 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3032 case 1: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3033 return octave_value (octave_int8 (int8_t (long_int_val))); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3034 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3035 case 2: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3036 return octave_value (octave_int16 (int16_t (long_int_val))); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3037 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3038 case 4: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3039 return octave_value (octave_int32 (int32_t (long_int_val))); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3040 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3041 case 8: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3042 return octave_value (octave_int64 (int64_t (long_int_val))); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3043 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3044 default: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3045 panic_impossible (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3046 }; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3047 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3048 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3049 return octave_value (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3050 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3051 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3052 namespace octave |
4037 | 3053 { |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3054 template <> |
28565
0ecec070c086
return token ID directly from base_lexer::handle_number
John W. Eaton <jwe@octave.org>
parents:
28522
diff
changeset
|
3055 int |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3056 base_lexer::handle_number<2> (void) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3057 { |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3058 // Skip 0[bB] prefix. |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3059 std::string yytxt (flex_yytext () + 2); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3060 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3061 yytxt.erase (std::remove (yytxt.begin (), yytxt.end (), '_'), |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3062 yytxt.end ()); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3063 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29368
diff
changeset
|
3064 std::size_t pos = yytxt.find_first_of ("su"); |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3065 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3066 bool unsigned_val = true; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3067 int bytes = -1; |
28586
703458652e30
lex.ll (base_lexer::handle_number): Eliminate shadowed variable warnings.
John W. Eaton <jwe@octave.org>
parents:
28583
diff
changeset
|
3068 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3069 if (pos == std::string::npos) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3070 { |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29368
diff
changeset
|
3071 std::size_t num_digits = yytxt.length (); |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3072 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3073 if (num_digits <= 8) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3074 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3075 else if (num_digits <= 16) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3076 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3077 else if (num_digits <= 32) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3078 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3079 else if (num_digits <= 64) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3080 bytes = 8; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3081 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3082 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3083 { |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3084 unsigned_val = (yytxt[pos] == 'u'); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3085 std::string size_str = yytxt.substr (pos+1); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3086 yytxt = yytxt.substr (0, pos); |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29368
diff
changeset
|
3087 std::size_t num_digits = yytxt.length (); |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3088 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3089 if (size_str == "8" && num_digits <= 8) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3090 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3091 else if (size_str == "16" && num_digits <= 16) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3092 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3093 else if (size_str == "32" && num_digits <= 32) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3094 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3095 else if (size_str == "64" && num_digits <= 64) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3096 bytes = 8; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3097 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3098 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3099 if (bytes < 0) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3100 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3101 token *tok |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3102 = new token (LEXICAL_ERROR, |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3103 "too many digits for binary constant", |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3104 m_tok_beg, m_tok_end); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3105 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3106 push_token (tok); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3107 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3108 return count_token_internal (LEXICAL_ERROR); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3109 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3110 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3111 // FIXME: is there a better way? Can uintmax_t be anything other |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3112 // than long or long long? Should we just be using uint64_t instead |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3113 // of uintmax_t? |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3114 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3115 errno = 0; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3116 char *end; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3117 uintmax_t long_int_val; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3118 if (sizeof (uintmax_t) == sizeof (unsigned long long)) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3119 long_int_val = strtoull (yytxt.c_str (), &end, 2); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3120 else if (sizeof (uintmax_t) == sizeof (unsigned long)) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3121 long_int_val = strtoul (yytxt.c_str (), &end, 2); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3122 else |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3123 panic_impossible (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3124 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3125 if (errno == ERANGE) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3126 panic_impossible (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3127 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3128 octave_value ov_value |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3129 = make_integer_value (long_int_val, unsigned_val, bytes); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3130 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3131 m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3132 m_at_beginning_of_statement = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3133 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3134 update_token_positions (flex_yyleng ()); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3135 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3136 push_token (new token (NUMBER, ov_value, yytxt, m_tok_beg, m_tok_end)); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3137 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3138 return count_token_internal (NUMBER); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3139 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3140 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3141 static uint64_t |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3142 flintmax (void) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3143 { |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3144 return (static_cast<uint64_t> (1) << std::numeric_limits<double>::digits); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3145 } |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3146 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3147 template <> |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3148 int |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3149 base_lexer::handle_number<10> (void) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3150 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3151 bool imag = false; |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3152 bool digits_only = true; |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3153 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3154 char *yytxt = flex_yytext (); |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29368
diff
changeset
|
3155 std::size_t yylng = flex_yyleng (); |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3156 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3157 OCTAVE_LOCAL_BUFFER (char, tmptxt, yylng + 1); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3158 char *rp = yytxt; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3159 char *p = &tmptxt[0]; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3160 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3161 char ch; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3162 while ((ch = *rp++)) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3163 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3164 switch (ch) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3165 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3166 case '_': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3167 break; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3168 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3169 case 'D': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3170 case 'd': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3171 *p++ = 'e'; |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3172 digits_only = false; |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3173 break; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3174 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3175 case 'I': |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3176 case 'J': |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3177 case 'i': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3178 case 'j': |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3179 // Octave does not provide imaginary integers. |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3180 digits_only = false; |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3181 imag = true; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3182 break; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3183 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3184 case '+': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3185 case '-': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3186 case '.': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3187 case 'E': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3188 case 'e': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3189 digits_only = false; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3190 *p++ = ch; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3191 break; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3192 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3193 default: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3194 *p++ = ch; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3195 break; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3196 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3197 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3198 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3199 *p = '\0'; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3200 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3201 double value = 0.0; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3202 int nread = 0; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3203 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3204 nread = sscanf (tmptxt, "%lf", &value); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3205 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3206 // If yytext doesn't contain a valid number, we are in deep doo doo. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3207 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3208 assert (nread == 1); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3209 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3210 octave_value ov_value; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3211 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3212 // Use >= because > will not return true until value is greater than |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3213 // flintmax + 2! |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3214 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3215 if (digits_only && value >= flintmax ()) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3216 { |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3217 // Try reading as an unsigned 64-bit integer. If there is a |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3218 // range error, then create a double value. Otherwise, create a |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3219 // special uint64 object that will be automatically converted to |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3220 // double unless it appears as the argument to one of the int64 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3221 // or uint64 functions. |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3222 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3223 errno = 0; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3224 char *end; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3225 uintmax_t long_int_val; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3226 if (sizeof (uintmax_t) == sizeof (unsigned long long)) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3227 long_int_val = strtoull (tmptxt, &end, 10); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3228 else if (sizeof (uintmax_t) == sizeof (unsigned long)) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3229 long_int_val = strtoul (tmptxt, &end, 10); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3230 else |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3231 panic_impossible (); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3232 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3233 if (errno != ERANGE) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3234 { |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3235 // If possible, store the value as a signed integer. |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3236 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3237 octave_base_value *magic_int; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3238 if (long_int_val > std::numeric_limits<int64_t>::max ()) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3239 magic_int = new octave_magic_uint (octave_uint64 (long_int_val)); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3240 else |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3241 magic_int = new octave_magic_int (octave_int64 (long_int_val)); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3242 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3243 ov_value = octave_value (magic_int); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3244 } |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3245 } |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3246 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3247 m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3248 m_at_beginning_of_statement = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3249 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3250 update_token_positions (yylng); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3251 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3252 if (ov_value.is_undefined ()) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3253 ov_value = (imag |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3254 ? octave_value (Complex (0.0, value)) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3255 : octave_value (value)); |
28582
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3256 |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3257 push_token (new token (NUMBER, ov_value, yytxt, m_tok_beg, m_tok_end)); |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3258 |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3259 return count_token_internal (NUMBER); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3260 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3261 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3262 template <> |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3263 int |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3264 base_lexer::handle_number<16> (void) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3265 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3266 // Skip 0[xX] prefix. |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3267 std::string yytxt (flex_yytext () + 2); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3268 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3269 yytxt.erase (std::remove (yytxt.begin (), yytxt.end (), '_'), |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3270 yytxt.end ()); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3271 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29368
diff
changeset
|
3272 std::size_t pos = yytxt.find_first_of ("su"); |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3273 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3274 bool unsigned_val = true; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3275 int bytes = -1; |
28586
703458652e30
lex.ll (base_lexer::handle_number): Eliminate shadowed variable warnings.
John W. Eaton <jwe@octave.org>
parents:
28583
diff
changeset
|
3276 |
28587
6310bb807752
lex.ll: Correct indentation in cset 703458652e30.
Rik <rik@octave.org>
parents:
28586
diff
changeset
|
3277 if (pos == std::string::npos) |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3278 { |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29368
diff
changeset
|
3279 std::size_t num_digits = yytxt.length (); |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3280 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3281 if (num_digits <= 2) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3282 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3283 else if (num_digits <= 4) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3284 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3285 else if (num_digits <= 8) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3286 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3287 else if (num_digits <= 16) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3288 bytes = 8; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3289 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3290 else |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3291 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3292 unsigned_val = (yytxt[pos] == 'u'); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3293 std::string size_str = yytxt.substr (pos+1); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3294 yytxt = yytxt.substr (0, pos); |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29368
diff
changeset
|
3295 std::size_t num_digits = yytxt.length (); |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3296 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3297 if (size_str == "8" && num_digits <= 2) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3298 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3299 else if (size_str == "16" && num_digits <= 4) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3300 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3301 else if (size_str == "32" && num_digits <= 8) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3302 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3303 else if (size_str == "64" && num_digits <= 16) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3304 bytes = 8; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3305 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3306 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3307 if (bytes < 0) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3308 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3309 token *tok |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3310 = new token (LEXICAL_ERROR, |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3311 "too many digits for hexadecimal constant", |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3312 m_tok_beg, m_tok_end); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3313 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3314 push_token (tok); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3315 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3316 return count_token_internal (LEXICAL_ERROR); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3317 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3318 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3319 // Assert here because if yytext doesn't contain a valid number, we |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3320 // are in deep doo doo. |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3321 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3322 uintmax_t long_int_val; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3323 assert (sscanf (yytxt.c_str (), "%jx", &long_int_val)); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3324 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3325 octave_value ov_value |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3326 = make_integer_value (long_int_val, unsigned_val, bytes); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3327 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3328 m_looking_for_object_index = false; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3329 m_at_beginning_of_statement = false; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3330 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3331 update_token_positions (flex_yyleng ()); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3332 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3333 push_token (new token (NUMBER, ov_value, yytxt, m_tok_beg, m_tok_end)); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3334 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3335 return count_token_internal (NUMBER); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3336 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3337 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3338 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3339 base_lexer::handle_continuation (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3340 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3341 char *yytxt = flex_yytext (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3342 int yylng = flex_yyleng (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3343 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3344 int offset = 1; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3345 if (yytxt[0] == '\\') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3346 warn_language_extension_continuation (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3347 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3348 offset = 3; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3349 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3350 bool have_space = false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3351 while (offset < yylng) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3352 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3353 char c = yytxt[offset]; |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
3354 if (is_space_or_tab (c)) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3355 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3356 have_space = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3357 offset++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3358 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3359 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3360 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3361 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3362 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3363 if (have_space) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3364 mark_previous_token_trailing_space (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3365 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3366 bool have_comment = false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3367 while (offset < yylng) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3368 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3369 char c = yytxt[offset]; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3370 if (c == '#' || c == '%') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3371 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3372 have_comment = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3373 offset++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3374 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3375 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3376 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3377 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3378 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3379 if (have_comment) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3380 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3381 m_comment_text = &yytxt[offset]; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3382 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3383 // finish_comment sets m_at_beginning_of_statement to true but |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3384 // that's not be correct if we are handling a continued |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3385 // statement. Preserve the current state. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3386 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3387 bool saved_bos = m_at_beginning_of_statement; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3388 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3389 finish_comment (comment_elt::end_of_line); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3390 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3391 m_at_beginning_of_statement = saved_bos; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3392 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3393 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3394 m_filepos.next_line (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3395 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3396 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3397 void |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3398 base_lexer::finish_comment (comment_elt::comment_type typ) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3399 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3400 bool copyright = looks_like_copyright (m_comment_text); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3401 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3402 if (m_nesting_level.none () && m_help_text.empty () && ! m_comment_text.empty () |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3403 && ! copyright && ! looks_like_shebang (m_comment_text)) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3404 m_help_text = m_comment_text; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3405 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3406 if (copyright) |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3407 typ = comment_elt::copyright; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3408 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3409 m_comment_buf.append (m_comment_text, typ); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3410 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3411 m_comment_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3412 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3413 m_at_beginning_of_statement = true; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3414 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3415 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3416 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3417 base_lexer::handle_close_bracket (int bracket_type) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3418 { |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3419 m_looking_at_object_index.pop_front (); |
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3420 |
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3421 m_looking_for_object_index = true; |
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3422 m_at_beginning_of_statement = false; |
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3423 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3424 if (! m_nesting_level.none ()) |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3425 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3426 m_nesting_level.remove (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3427 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3428 if (bracket_type == ']') |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3429 m_bracketflag--; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3430 else if (bracket_type == '}') |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3431 m_braceflag--; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3432 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3433 panic_impossible (); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3434 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3435 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3436 pop_start_state (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3437 |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3438 return count_token (bracket_type); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3439 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3440 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3441 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3442 base_lexer::looks_like_command_arg (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3443 { |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
3444 if (! m_allow_command_syntax) |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
3445 return false; |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
3446 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3447 bool space_before = space_follows_previous_token (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3448 bool space_after = looking_at_space (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3449 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3450 return (space_before && ! space_after |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3451 && previous_token_may_be_command ()); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3452 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3453 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3454 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3455 base_lexer::handle_superclass_identifier (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3456 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3457 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3458 |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3459 std::string txt = flex_yytext (); |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3460 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3461 txt.erase (std::remove_if (txt.begin (), txt.end (), is_space_or_tab), |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3462 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3463 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
3464 std::size_t pos = txt.find ("@"); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3465 |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26710
diff
changeset
|
3466 std::string meth = txt.substr (0, pos); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3467 std::string cls = txt.substr (pos + 1); |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3468 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
3469 if (iskeyword (meth) || fq_identifier_contains_keyword (cls)) |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3470 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3471 token *tok |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3472 = new token (LEXICAL_ERROR, |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3473 "method, class, and package names may not be keywords", |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3474 m_tok_beg, m_tok_end); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3475 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3476 push_token (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3477 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3478 return count_token_internal (LEXICAL_ERROR); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3479 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3480 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3481 push_token (new token (SUPERCLASSREF, meth, cls, m_tok_beg, m_tok_end)); |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3482 |
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3483 m_filepos.increment_column (flex_yyleng ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3484 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3485 return count_token_internal (SUPERCLASSREF); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3486 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3487 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3488 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3489 base_lexer::handle_meta_identifier (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3490 { |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3491 std::string txt = flex_yytext (); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3492 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3493 txt.erase (std::remove_if (txt.begin (), txt.end (), is_space_or_tab), |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3494 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3495 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3496 // Eliminate leading '?' |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3497 std::string cls = txt.substr (1); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3498 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3499 // Token positions should have already been updated before this |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3500 // function is called. |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3501 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3502 if (fq_identifier_contains_keyword (cls)) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3503 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3504 token *tok = new token (LEXICAL_ERROR, |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3505 "class and package names may not be keywords", |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3506 m_tok_beg, m_tok_end); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3507 push_token (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3508 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3509 return count_token_internal (LEXICAL_ERROR); |
16126
5c885c13bfa3
localize use of yylval.tok_val in lexical_feedback member functions
John W. Eaton <jwe@octave.org>
parents:
16125
diff
changeset
|
3510 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3511 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3512 push_token (new token (METAQUERY, cls, m_tok_beg, m_tok_end)); |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3513 |
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3514 m_filepos.increment_column (flex_yyleng ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3515 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3516 return METAQUERY; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3517 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3518 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3519 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3520 base_lexer::handle_fq_identifier (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3521 { |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3522 std::string txt = flex_yytext (); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3523 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3524 txt.erase (std::remove_if (txt.begin (), txt.end (), is_space_or_tab), |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3525 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3526 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3527 // Token positions should have already been updated before this |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3528 // function is called. |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3529 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3530 if (fq_identifier_contains_keyword (txt)) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3531 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3532 token *tok |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3533 = new token (LEXICAL_ERROR, |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3534 "function, method, class, and package names may not be keywords", |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3535 m_tok_beg, m_tok_end); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3536 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3537 push_token (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3538 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3539 return count_token_internal (LEXICAL_ERROR); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3540 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3541 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3542 push_token (new token (FQ_IDENT, txt, m_tok_beg, m_tok_end)); |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3543 |
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3544 m_filepos.increment_column (flex_yyleng ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3545 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3546 return FQ_IDENT; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3547 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3548 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3549 // Figure out exactly what kind of token to return when we have seen |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3550 // an identifier. Handles keywords. Return -1 if the identifier |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3551 // should be ignored. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3552 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3553 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3554 base_lexer::handle_identifier (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3555 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3556 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3557 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3558 std::string ident = flex_yytext (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3559 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3560 // If we are expecting a structure element, avoid recognizing |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3561 // keywords and other special names and return STRUCT_ELT, which is |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3562 // a string that is also a valid identifier. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3563 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3564 if (m_looking_at_indirect_ref) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3565 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3566 push_token (new token (STRUCT_ELT, ident, m_tok_beg, m_tok_end)); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3567 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3568 m_looking_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3569 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3570 return STRUCT_ELT; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3571 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3572 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
3573 // If ident is a keyword token, then make_keyword_token will set |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3574 // m_at_beginning_of_statement. For example, if tok is an IF |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3575 // token, then m_at_beginning_of_statement will be false. |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3576 |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
3577 int kw_token = make_keyword_token (ident); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3578 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3579 // If we have a regular keyword, return it. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3580 // Keywords can be followed by identifiers. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3581 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3582 if (kw_token) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3583 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3584 m_looking_for_object_index = false; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3585 |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
3586 // The call to make_keyword_token set m_at_beginning_of_statement. |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3587 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3588 return count_token_internal (kw_token); |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3589 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3590 |
29723
6858992dfadf
enter symbols into current scope in parser instead of lexer
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
3591 token *tok = new token (NAME, ident, m_tok_beg, m_tok_end); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3592 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3593 // The following symbols are handled specially so that things like |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3594 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3595 // pi +1 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3596 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3597 // are parsed as an addition expression instead of as a command-style |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3598 // function call with the argument "+1". |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3599 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3600 if (m_at_beginning_of_statement |
27736
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3601 && ! (m_parsing_anon_fcn_body |
29723
6858992dfadf
enter symbols into current scope in parser instead of lexer
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
3602 || is_variable (ident) |
27736
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3603 || ident == "e" || ident == "pi" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3604 || ident == "I" || ident == "i" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3605 || ident == "J" || ident == "j" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3606 || ident == "Inf" || ident == "inf" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3607 || ident == "NaN" || ident == "nan")) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3608 tok->mark_may_be_command (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3609 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3610 push_token (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3611 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3612 // The magic end index can't be indexed. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3613 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3614 if (ident != "end") |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3615 m_looking_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3616 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3617 m_at_beginning_of_statement = false; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3618 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3619 return count_token_internal (NAME); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3620 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3621 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3622 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3623 base_lexer::maybe_warn_separator_insert (char sep) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3624 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3625 std::string nm = m_fcn_file_full_name; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3626 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3627 if (nm.empty ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3628 warning_with_id ("Octave:separator-insert", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3629 "potential auto-insertion of '%c' near line %d", |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3630 sep, m_filepos.line ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3631 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3632 warning_with_id ("Octave:separator-insert", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3633 "potential auto-insertion of '%c' near line %d of file %s", |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3634 sep, m_filepos.line (), nm.c_str ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3635 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3636 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3637 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3638 base_lexer::warn_single_quote_string (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3639 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3640 std::string nm = m_fcn_file_full_name; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3641 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3642 if (nm.empty ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3643 warning_with_id ("Octave:single-quote-string", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3644 "single quote delimited string near line %d", |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3645 m_filepos.line ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3646 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3647 warning_with_id ("Octave:single-quote-string", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3648 "single quote delimited string near line %d of file %s", |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3649 m_filepos.line (), nm.c_str ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3650 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3651 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3652 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3653 base_lexer::warn_language_extension (const std::string& msg) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3654 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3655 std::string nm = m_fcn_file_full_name; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3656 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3657 if (nm.empty ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3658 warning_with_id ("Octave:language-extension", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3659 "Octave language extension used: %s", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3660 msg.c_str ()); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3661 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3662 warning_with_id ("Octave:language-extension", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3663 "Octave language extension used: %s near line %d offile %s", |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
3664 msg.c_str (), m_filepos.line (), nm.c_str ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3665 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3666 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3667 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3668 base_lexer::maybe_warn_language_extension_comment (char c) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3669 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3670 if (c == '#') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3671 warn_language_extension ("# used as comment character"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3672 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3673 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3674 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3675 base_lexer::warn_language_extension_continuation (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3676 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3677 warn_language_extension ("\\ used as line continuation marker"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3678 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3679 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3680 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3681 base_lexer::warn_language_extension_operator (const std::string& op) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3682 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3683 std::string t = op; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3684 int n = t.length (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3685 if (t[n-1] == '\n') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3686 t.resize (n-1); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3687 warn_language_extension (t + " used as operator"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3688 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3689 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3690 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3691 base_lexer::push_token (token *tok) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3692 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3693 YYSTYPE *lval = yyget_lval (m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3694 lval->tok_val = tok; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3695 m_tokens.push (tok); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3696 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3697 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3698 token * |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3699 base_lexer::current_token (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3700 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3701 YYSTYPE *lval = yyget_lval (m_scanner); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3702 return lval->tok_val; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3703 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3704 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
3705 std::size_t |
28264
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3706 base_lexer::pending_token_count (void) const |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3707 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3708 return m_tokens.size (); |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3709 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3710 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3711 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3712 base_lexer::display_token (int tok) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3713 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3714 switch (tok) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3715 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3716 case '=': std::cerr << "'='\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3717 case ':': std::cerr << "':'\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3718 case '-': std::cerr << "'-'\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3719 case '+': std::cerr << "'+'\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3720 case '*': std::cerr << "'*'\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3721 case '/': std::cerr << "'/'\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3722 case ADD_EQ: std::cerr << "ADD_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3723 case SUB_EQ: std::cerr << "SUB_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3724 case MUL_EQ: std::cerr << "MUL_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3725 case DIV_EQ: std::cerr << "DIV_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3726 case LEFTDIV_EQ: std::cerr << "LEFTDIV_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3727 case POW_EQ: std::cerr << "POW_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3728 case EMUL_EQ: std::cerr << "EMUL_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3729 case EDIV_EQ: std::cerr << "EDIV_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3730 case ELEFTDIV_EQ: std::cerr << "ELEFTDIV_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3731 case EPOW_EQ: std::cerr << "EPOW_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3732 case AND_EQ: std::cerr << "AND_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3733 case OR_EQ: std::cerr << "OR_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3734 case EXPR_AND_AND: std::cerr << "EXPR_AND_AND\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3735 case EXPR_OR_OR: std::cerr << "EXPR_OR_OR\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3736 case EXPR_AND: std::cerr << "EXPR_AND\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3737 case EXPR_OR: std::cerr << "EXPR_OR\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3738 case EXPR_NOT: std::cerr << "EXPR_NOT\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3739 case EXPR_LT: std::cerr << "EXPR_LT\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3740 case EXPR_LE: std::cerr << "EXPR_LE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3741 case EXPR_EQ: std::cerr << "EXPR_EQ\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3742 case EXPR_NE: std::cerr << "EXPR_NE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3743 case EXPR_GE: std::cerr << "EXPR_GE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3744 case EXPR_GT: std::cerr << "EXPR_GT\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3745 case LEFTDIV: std::cerr << "LEFTDIV\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3746 case EMUL: std::cerr << "EMUL\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3747 case EDIV: std::cerr << "EDIV\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3748 case ELEFTDIV: std::cerr << "ELEFTDIV\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3749 case EPLUS: std::cerr << "EPLUS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3750 case EMINUS: std::cerr << "EMINUS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3751 case HERMITIAN: std::cerr << "HERMITIAN\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3752 case TRANSPOSE: std::cerr << "TRANSPOSE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3753 case PLUS_PLUS: std::cerr << "PLUS_PLUS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3754 case MINUS_MINUS: std::cerr << "MINUS_MINUS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3755 case POW: std::cerr << "POW\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3756 case EPOW: std::cerr << "EPOW\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3757 |
28582
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3758 case NUMBER: |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3759 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3760 token *tok_val = current_token (); |
28582
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3761 std::cerr << "NUMBER ["; |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3762 octave_value num = tok_val->number (); |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3763 num.print_raw (std::cerr); |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3764 std::cerr << "]\n"; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3765 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3766 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3767 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3768 case STRUCT_ELT: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3769 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3770 token *tok_val = current_token (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3771 std::cerr << "STRUCT_ELT [" << tok_val->text () << "]\n"; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3772 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3773 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3774 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3775 case NAME: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3776 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3777 token *tok_val = current_token (); |
29723
6858992dfadf
enter symbols into current scope in parser instead of lexer
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
3778 std::cerr << "NAME [" << tok_val->text () << "]\n"; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3779 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3780 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3781 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3782 case END: std::cerr << "END\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3783 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3784 case DQ_STRING: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3785 case SQ_STRING: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3786 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3787 token *tok_val = current_token (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3788 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3789 std::cerr << (tok == DQ_STRING ? "DQ_STRING" : "SQ_STRING") |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3790 << " [" << tok_val->text () << "]\n"; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3791 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3792 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3793 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3794 case FOR: std::cerr << "FOR\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3795 case WHILE: std::cerr << "WHILE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3796 case DO: std::cerr << "DO\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3797 case UNTIL: std::cerr << "UNTIL\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3798 case IF: std::cerr << "IF\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3799 case ELSEIF: std::cerr << "ELSEIF\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3800 case ELSE: std::cerr << "ELSE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3801 case SWITCH: std::cerr << "SWITCH\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3802 case CASE: std::cerr << "CASE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3803 case OTHERWISE: std::cerr << "OTHERWISE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3804 case BREAK: std::cerr << "BREAK\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3805 case CONTINUE: std::cerr << "CONTINUE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3806 case FUNC_RET: std::cerr << "FUNC_RET\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3807 case UNWIND: std::cerr << "UNWIND\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3808 case CLEANUP: std::cerr << "CLEANUP\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3809 case TRY: std::cerr << "TRY\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3810 case CATCH: std::cerr << "CATCH\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3811 case GLOBAL: std::cerr << "GLOBAL\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3812 case PERSISTENT: std::cerr << "PERSISTENT\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3813 case FCN_HANDLE: std::cerr << "FCN_HANDLE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3814 case END_OF_INPUT: std::cerr << "END_OF_INPUT\n\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3815 case LEXICAL_ERROR: std::cerr << "LEXICAL_ERROR\n\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3816 case FCN: std::cerr << "FCN\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3817 case INPUT_FILE: std::cerr << "INPUT_FILE\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3818 case SUPERCLASSREF: std::cerr << "SUPERCLASSREF\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3819 case METAQUERY: std::cerr << "METAQUERY\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3820 case GET: std::cerr << "GET\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3821 case SET: std::cerr << "SET\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3822 case PROPERTIES: std::cerr << "PROPERTIES\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3823 case METHODS: std::cerr << "METHODS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3824 case EVENTS: std::cerr << "EVENTS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3825 case CLASSDEF: std::cerr << "CLASSDEF\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3826 case '\n': std::cerr << "\\n\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3827 case '\r': std::cerr << "\\r\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3828 case '\t': std::cerr << "TAB\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3829 default: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3830 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3831 if (tok < 256 && tok > 31) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3832 std::cerr << static_cast<char> (tok) << "\n"; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3833 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3834 std::cerr << "UNKNOWN(" << tok << ")\n"; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3835 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3836 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3837 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3838 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3839 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3840 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3841 base_lexer::fatal_error (const char *msg) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3842 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3843 error ("fatal lexer error: %s", msg); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3844 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3845 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3846 bool |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3847 base_lexer::debug_flag (void) const |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3848 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3849 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3850 return stgs.lexer_debug_flag (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3851 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3852 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3853 bool |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3854 base_lexer::display_tokens (void) const |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3855 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3856 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3857 return stgs.display_tokens (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3858 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3859 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3860 void |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3861 base_lexer::increment_token_count (void) |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3862 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3863 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3864 stgs.increment_token_count (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3865 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3866 m_token_count++; |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3867 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3868 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3869 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3870 base_lexer::lexer_debug (const char *pattern) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3871 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3872 if (debug_flag ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3873 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3874 std::cerr << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3875 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3876 display_start_state (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3877 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3878 std::cerr << "P: " << pattern << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3879 std::cerr << "T: " << flex_yytext () << std::endl; |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3880 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3881 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3882 |
25994
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3883 bool |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3884 base_lexer::input_from_tmp_history_file (void) |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3885 { |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3886 history_system& history_sys = m_interpreter.get_history_system (); |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3887 |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3888 return history_sys.input_from_tmp_file (); |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3889 } |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3890 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3891 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3892 base_lexer::push_start_state (int state) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3893 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3894 OCTAVE_YYG; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3895 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3896 start_state_stack.push (state); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3897 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3898 BEGIN (start_state ()); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3899 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3900 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3901 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3902 base_lexer::pop_start_state (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3903 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3904 OCTAVE_YYG; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3905 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3906 start_state_stack.pop (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3907 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3908 BEGIN (start_state ()); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3909 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3910 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3911 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3912 base_lexer::clear_start_state (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3913 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3914 while (! start_state_stack.empty ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3915 start_state_stack.pop (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3916 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3917 push_start_state (INITIAL); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3918 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3919 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3920 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3921 base_lexer::display_start_state (void) const |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3922 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3923 std::cerr << "S: "; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3924 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3925 switch (start_state ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3926 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3927 case INITIAL: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3928 std::cerr << "INITIAL" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3929 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3930 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3931 case COMMAND_START: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3932 std::cerr << "COMMAND_START" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3933 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3934 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3935 case MATRIX_START: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3936 std::cerr << "MATRIX_START" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3937 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3938 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3939 case INPUT_FILE_START: |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3940 std::cerr << "INPUT_FILE_START" << std::endl; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3941 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3942 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3943 case BLOCK_COMMENT_START: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3944 std::cerr << "BLOCK_COMMENT_START" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3945 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3946 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3947 case LINE_COMMENT_START: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3948 std::cerr << "LINE_COMMENT_START" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3949 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3950 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3951 case DQ_STRING_START: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3952 std::cerr << "DQ_STRING_START" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3953 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3954 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3955 case SQ_STRING_START: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3956 std::cerr << "SQ_STRING_START" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3957 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3958 |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3959 case FQ_IDENT_START: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3960 std::cerr << "FQ_IDENT_START" << std::endl; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3961 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3962 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3963 default: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3964 std::cerr << "UNKNOWN START STATE!" << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3965 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3966 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3967 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3968 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3969 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3970 base_lexer::maybe_unput_comma_before_unary_op (int tok) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3971 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3972 int prev_tok = previous_token_value (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3973 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3974 bool unput_comma = false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3975 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3976 if (whitespace_is_significant () && space_follows_previous_token ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3977 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3978 int c = text_yyinput (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3979 xunput (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3980 |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
3981 bool space_after = is_space_or_tab (c); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3982 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3983 if (! (prev_tok == '[' || prev_tok == '{' |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3984 || previous_token_is_binop () |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3985 || ((tok == '+' || tok == '-') && space_after))) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3986 unput_comma = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3987 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3988 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3989 return unput_comma; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3990 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3991 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3992 int |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3993 base_lexer::handle_op (int tok, bool bos, bool compat) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3994 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3995 if (! compat) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3996 warn_language_extension_operator (flex_yytext ()); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3997 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3998 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3999 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
4000 push_token (new token (tok, m_tok_beg, m_tok_end)); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
4001 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4002 m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4003 m_at_beginning_of_statement = bos; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4004 |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4005 switch (tok) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4006 { |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4007 case EXPR_LT: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4008 if (m_parsing_classdef_decl) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4009 { |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4010 m_parsing_classdef_superclass = true; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4011 push_start_state (FQ_IDENT_START); |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4012 } |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4013 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4014 |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4015 case EXPR_AND: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4016 if (m_parsing_classdef_superclass) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4017 push_start_state (FQ_IDENT_START); |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4018 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4019 |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4020 default: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4021 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4022 } |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
4023 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4024 return count_token_internal (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4025 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4026 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4027 // When a command argument boundary is detected, push out the current |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4028 // argument being built. This one seems like a good candidate for a |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4029 // function call. |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4030 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4031 int |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4032 base_lexer::finish_command_arg (void) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4033 { |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4034 int tok = SQ_STRING; |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4035 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
4036 token *tok_val = new token (tok, m_string_text, m_tok_beg, m_tok_end); |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4037 |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4038 m_string_text = ""; |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4039 m_command_arg_paren_count = 0; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4040 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4041 return handle_token (tok, tok_val); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4042 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4043 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4044 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4045 base_lexer::handle_token (int tok, token *tok_val) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4046 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4047 if (! tok_val) |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
4048 tok_val = new token (tok, m_tok_beg, m_tok_end); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4049 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4050 push_token (tok_val); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4051 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4052 return count_token_internal (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4053 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4054 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4055 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4056 base_lexer::count_token (int tok) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4057 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
4058 token *tok_val = new token (tok, m_tok_beg, m_tok_end); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4059 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4060 push_token (tok_val); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4061 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4062 return count_token_internal (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4063 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4064 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4065 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4066 base_lexer::count_token_internal (int tok) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4067 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4068 if (tok != '\n') |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4069 increment_token_count (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4070 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4071 return show_token (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4072 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4073 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4074 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4075 base_lexer::show_token (int tok) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4076 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4077 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4078 if (display_tokens ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4079 display_token (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4080 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4081 if (debug_flag ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4082 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4083 std::cerr << "R: "; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4084 display_token (tok); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4085 std::cerr << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4086 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4087 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4088 return tok; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4089 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4090 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4091 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4092 lexer::fill_flex_buffer (char *buf, unsigned max_size) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4093 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4094 int status = 0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4095 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4096 if (m_input_buf.empty ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4097 { |
27527
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4098 input_system& input_sys = m_interpreter.get_input_system (); |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4099 |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4100 std::string ps |
27528
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
4101 = m_initial_input ? input_sys.PS1 () : input_sys.PS2 (); |
27527
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4102 |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4103 std::string prompt = command_editor::decode_prompt_string (ps); |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4104 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4105 bool eof = false; |
27527
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4106 m_current_input_line = m_reader.get_input (prompt, eof); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4107 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4108 m_input_buf.fill (m_current_input_line, eof); |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4109 |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4110 // Attempt to capture text for functions defined on the |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4111 // command line. |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4112 // |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4113 // FIXME: the handling of newline here seems a bit clumsy. |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4114 // |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4115 // See also comments in push_lexer::append_input. |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4116 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4117 if (m_buffer_function_text) |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4118 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4119 if (! m_current_input_line.empty ()) |
23786
10136bfd46a3
lex.ll: Fix heap-buffer-overflow (bug #51533).
Rik <rik@octave.org>
parents:
23750
diff
changeset
|
4120 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4121 m_function_text += m_current_input_line; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4122 if (m_current_input_line.back () != '\n') |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4123 m_function_text += '\n'; |
23786
10136bfd46a3
lex.ll: Fix heap-buffer-overflow (bug #51533).
Rik <rik@octave.org>
parents:
23750
diff
changeset
|
4124 } |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4125 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4126 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4127 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4128 if (! m_input_buf.empty ()) |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4129 status = m_input_buf.copy_chunk (buf, max_size); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4130 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4131 status = YY_NULL; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4132 |
27528
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
4133 m_initial_input = false; |
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
4134 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4135 return status; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4136 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4137 |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4138 void |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4139 push_lexer::append_input (const std::string& input, bool eof) |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4140 { |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4141 // FIXME: input may contain more than one line, so how can we |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4142 // properly start buffering input for command-line functions? |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4143 // |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
4144 // Currently, base_lexer::make_keyword_token starts buffering text |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4145 // for command-line functions by setting the initial value of |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4146 // m_function_text to m_current_input_line when function_kw is |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4147 // recognized. To make that work, we need to do something like |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4148 // maintain a queue of input strings and pass them to the flex |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4149 // buffer one line at a time, while also setting |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4150 // m_current_input_line. Some care will be needed if a single line |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4151 // of input arrives in multiple calls to append_input. |
27512
549273db93e4
cache current input line in push lexer
John W. Eaton <jwe@octave.org>
parents:
27443
diff
changeset
|
4152 // |
549273db93e4
cache current input line in push lexer
John W. Eaton <jwe@octave.org>
parents:
27443
diff
changeset
|
4153 // OR, should we require that the input string to append_input |
549273db93e4
cache current input line in push lexer
John W. Eaton <jwe@octave.org>
parents:
27443
diff
changeset
|
4154 // IS a single line of input? That seems to be what we are doing |
549273db93e4
cache current input line in push lexer
John W. Eaton <jwe@octave.org>
parents:
27443
diff
changeset
|
4155 // here by setting m_current_input_line to input. |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4156 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4157 m_input_buf.fill (input, eof); |
27512
549273db93e4
cache current input line in push lexer
John W. Eaton <jwe@octave.org>
parents:
27443
diff
changeset
|
4158 m_current_input_line = input; |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4159 } |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4160 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4161 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4162 push_lexer::fill_flex_buffer (char *buf, unsigned max_size) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4163 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4164 int status = 0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4165 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4166 if (m_input_buf.empty () && ! m_input_buf.at_eof ()) |
28112
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4167 { |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4168 // If the input buffer is empty or we are at the end of the |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4169 // buffer, insert ASCII 1 as a marker for subsequent rules. |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4170 // Don't insert a newline character in this case. Instead of |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4171 // calling input_buffer::fill followed immediately by |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4172 // input_buffer::copy_chunk, simply insert the marker directly |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4173 // in BUF. |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4174 |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4175 assert (max_size > 0); |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4176 |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4177 buf[0] = static_cast<char> (1); |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4178 status = 1; |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4179 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4180 else |
28112
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4181 { |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4182 // Note that the copy_chunk function may append a newline |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4183 // character to the input. |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4184 |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4185 if (! m_input_buf.empty ()) |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
4186 status = m_input_buf.copy_chunk (buf, max_size, true); |
28112
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4187 else |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4188 status = YY_NULL; |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4189 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4190 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4191 return status; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4192 } |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
4193 } |