Mercurial > octave
annotate libinterp/parse-tree/lex.ll @ 29960:939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
In files with both OCTAVE_NAMESPACE_BEGIN/END and "namespace octave"
blocks, merge adjacent blocks. Use the macros in place of "namespace
octave" in affected files and the corresponding header files.
Files affected: call-stack.cc, call-stack.h, defaults.cc, defaults.h,
defun-int.h, display.cc, display.h, environment.cc, environment.h,
error.cc, error.h, event-manager.cc, event-manager.h, fcn-info.cc,
fcn-info.h, help.cc, help.h, input.cc, input.h, interpreter.cc,
interpreter.h, load-path.cc, load-path.h, load-save.cc, load-save.h,
oct-hist.cc, oct-hist.h, pager.cc, pager.h, settings.cc, settings.h,
sighandlers.cc, sighandlers.h, symtab.cc, symtab.h, sysdep.cc,
sysdep.h, utils.cc, utils.h, __ode15__.cc, gzip.cc, ov-fcn-handle.cc,
ov-fcn-handle.h, ov-java.cc, ov-java.h, ov-typeinfo.cc, ov-typeinfo.h,
ov.cc, ov.h, octave.cc, octave.h, lex.ll, oct-parse.yy, profiler.cc,
profiler.h, pt-eval.cc, and pt-eval.h.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 14 Aug 2021 21:50:26 -0400 |
parents | 32c3a5805893 |
children | 7d6709900da7 |
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_UNARY_OP(PATTERN, TOK, COMPAT) \ |
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 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
193 if (curr_lexer->looks_like_command_arg ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
194 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
195 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
196 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
197 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
198 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
199 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
|
200 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
201 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
202 { \ |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
203 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
|
204 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
205 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
206 curr_lexer->xunput (','); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
207 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
208 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
209 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
|
210 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
211 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
212 while (0) |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
213 |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
214 #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
|
215 do \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
216 { \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
217 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
|
218 { \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
219 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
|
220 return STATUS; \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
221 \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
222 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
|
223 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
|
224 } \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
225 } \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
226 while (0) |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
227 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
228 // 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
|
229 // 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
|
230 // 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
|
231 #define HANDLE_STRING_CONTINUATION \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
232 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
233 { \ |
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
|
234 curr_lexer->m_filepos.next_line (); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
235 \ |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
236 HANDLE_EOB_OR_EOF (-1); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
237 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
238 while (0) |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
239 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
240 #define HANDLE_NUMBER(PATTERN, BASE) \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
241 do \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
242 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
243 curr_lexer->lexer_debug (PATTERN); \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
244 \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
245 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
|
246 && 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
|
247 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
248 yyless (0); \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
249 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
|
250 } \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
251 else \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
252 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
253 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
|
254 \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
255 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
|
256 && 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
|
257 && ! (tok == '[' || tok == '{' \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
258 || 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
|
259 { \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
260 yyless (0); \ |
28774 | 261 curr_lexer->xunput (','); \ |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
262 } \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
263 else \ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
264 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
|
265 } \ |
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 while (0) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
268 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
269 #define HANDLE_IDENTIFIER(pattern, get_set) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
270 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
271 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
272 curr_lexer->lexer_debug (pattern); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
273 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
274 int tok = curr_lexer->previous_token_value (); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
275 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
276 if (curr_lexer->whitespace_is_significant () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
277 && curr_lexer->space_follows_previous_token () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
278 && ! (tok == '[' || tok == '{' \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
279 || curr_lexer->previous_token_is_binop ())) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
280 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
281 yyless (0); \ |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
282 curr_lexer->xunput (','); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
283 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
284 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
285 { \ |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
286 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
|
287 && curr_lexer->previous_token_may_be_command ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
288 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
289 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
290 curr_lexer->push_start_state (COMMAND_START); \ |
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 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
293 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
294 if (get_set) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
295 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
296 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
|
297 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
|
298 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
|
299 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
300 \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
301 return curr_lexer->handle_identifier (); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
302 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
303 } \ |
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 while (0) |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
306 |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
307 static inline bool |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
308 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
|
309 { |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
310 return c == ' ' || c == '\t'; |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
311 } |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
312 |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
313 static inline bool |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
314 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
|
315 { |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
316 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
|
317 } |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
318 |
29960
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
319 OCTAVE_NAMESPACE_BEGIN |
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
320 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
321 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
|
322 { |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
323 // 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
|
324 // 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
|
325 // "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
|
326 // 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
|
327 // 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
|
328 // 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
|
329 // "methods", and "properties". |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
330 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
331 // 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
|
332 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
|
333 && ! (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
|
334 || 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
|
335 || 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
|
336 } |
29960
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
337 |
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
338 OCTAVE_NAMESPACE_END |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
339 |
1 | 340 %} |
341 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
342 D [0-9] |
20588
e34692daf663
Extend parser to accept '_' in numbers.
Rik <rik@octave.org>
parents:
20547
diff
changeset
|
343 D_ [0-9_] |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
344 S [ \t] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
345 NL ((\n)|(\r)|(\r\n)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
346 CCHAR [#%] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
347 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
|
348 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
|
349 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
350 %{ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
351 // 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
|
352 // 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
|
353 // 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
|
354 // 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
|
355 %} |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
356 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
357 DECIMAL_DIGITS ({D}{D_}*) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
358 EXPONENT ([DdEe][+-]?{DECIMAL_DIGITS}) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
359 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
|
360 IMAG_DECIMAL ({REAL_DECIMAL}[IiJj]) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
361 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
|
362 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
363 %{ |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
364 // 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
|
365 // 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
|
366 // 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
|
367 // 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
|
368 // 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
|
369 // 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
|
370 // 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
|
371 // 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
|
372 // integer equal to -128). |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
373 %} |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
374 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
375 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
|
376 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
|
377 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
|
378 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
|
379 HEXADECIMAL_NUMBER ({HEXADECIMAL_BITS}|{HEXADECIMAL_BITS}{SIZE_SUFFIX}) |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
380 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
381 ANY_EXCEPT_NL [^\r\n] |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
382 ANY_INCLUDING_NL (.|{NL}) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
383 |
1 | 384 %% |
385 | |
9474
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
386 %{ |
20835
14cd86258b3d
use 'invalid' instead of 'bogus' in source files
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
387 // 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
|
388 // the parser go down a special path. |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
389 %} |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
390 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
391 <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
|
392 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
|
393 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
394 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
|
395 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
396 // 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
|
397 // 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
|
398 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
|
399 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
400 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
401 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
402 return curr_lexer->show_token (INPUT_FILE); |
4238 | 403 } |
404 | |
18774
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
405 <INPUT_FILE_START><<EOF>> { |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
406 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
|
407 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
408 // 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
|
409 // 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
|
410 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
|
411 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
412 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
|
413 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
414 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
|
415 } |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
416 |
968 | 417 %{ |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
418 // Help and other command-style functions. |
968 | 419 %} |
420 | |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
421 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
422 // 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
|
423 // 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
|
424 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
425 |
18312
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
426 <COMMAND_START>(\.\.\.){ANY_EXCEPT_NL}*{NL} { |
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
427 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
|
428 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
429 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
|
430 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
431 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
|
432 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
|
433 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
434 } |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
435 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
436 HANDLE_STRING_CONTINUATION; |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
437 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
438 |
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 // 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
|
441 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
442 |
18312
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
443 <COMMAND_START>({CCHAR}{ANY_EXCEPT_NL}*)?{NL} { |
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
444 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
|
445 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
446 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
|
447 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
448 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
|
449 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
|
450 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
451 } |
8535 | 452 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
453 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
|
454 |
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
|
455 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
|
456 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
|
457 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
|
458 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
459 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
460 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
|
461 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
462 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
463 <COMMAND_START>[\,\;] { |
18234 | 464 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
|
465 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
466 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
|
467 { |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
468 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
|
469 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
470 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
|
471 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
|
472 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
473 } |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
474 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
475 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
|
476 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
477 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
|
478 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
|
479 curr_lexer->pop_start_state (); |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
480 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
481 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
|
482 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
483 else |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
484 { |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
485 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
|
486 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
|
487 } |
967 | 488 } |
1 | 489 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
490 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
491 // 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
|
492 // 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
|
493 // 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
|
494 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
495 |
18234 | 496 <COMMAND_START>[\(\[\{]* { |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
497 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
|
498 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
499 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
|
500 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
|
501 curr_lexer->m_filepos.increment_column (yyleng); |
967 | 502 } |
1 | 503 |
18234 | 504 <COMMAND_START>[\)\]\}]* { |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
505 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
|
506 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
507 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
|
508 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
|
509 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
|
510 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
511 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
512 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
513 // 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
|
514 // 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
|
515 // text. For instance, |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
516 // |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
517 // command 'text1'"text2" |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
518 // |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
519 // 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
|
520 // 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
|
521 // 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
|
522 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
523 |
4208 | 524 <COMMAND_START>[\"\'] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
525 curr_lexer->lexer_debug ("<COMMAND_START>[\\\"\\']"); |
8535 | 526 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
527 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
|
528 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
|
529 ? 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
|
530 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
531 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
|
532 |
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
|
533 curr_lexer->m_filepos.increment_column (yyleng); |
975 | 534 } |
535 | |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
536 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
537 // 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
|
538 // 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
|
539 // incorporated into the argument. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
540 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
541 |
18234 | 542 <COMMAND_START>{S}* { |
543 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
|
544 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
545 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
|
546 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
547 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
|
548 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
549 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
|
550 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
|
551 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
552 } |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
553 } |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
554 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
555 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
|
556 |
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
|
557 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
|
558 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
559 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
560 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
561 // 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
|
562 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
563 |
18234 | 564 <COMMAND_START>([\.]|[^#% \t\r\n\.\,\;\"\'\(\[\{\}\]\)]*) { |
18458
ebb878596bcf
Restore escaped backslashes accidentally deleted by cset af8a70d6885c
Mike Miller <mtmiller@ieee.org>
parents:
18437
diff
changeset
|
565 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
|
566 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
567 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
|
568 curr_lexer->m_filepos.increment_column (yyleng); |
967 | 569 } |
1 | 570 |
28772
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
571 %{ |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
572 // 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
|
573 %} |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
574 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
575 <MATRIX_START>{S}* { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
576 curr_lexer->lexer_debug ("<MATRIX_START>{S}*"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
577 |
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
|
578 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
|
579 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
580 curr_lexer->mark_previous_token_trailing_space (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
581 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
582 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
583 <MATRIX_START>{NL} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
584 curr_lexer->lexer_debug ("<MATRIX_START>{NL}"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
585 |
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
|
586 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
|
587 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
588 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
|
589 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
|
590 else |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
591 { |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
592 int tok = curr_lexer->previous_token_value (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
593 |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
594 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
|
595 curr_lexer->xunput (';'); |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
596 } |
16257
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 |
968 | 599 %{ |
28772
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
600 // 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
|
601 // 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
|
602 %} |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
603 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
604 <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
|
605 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
|
606 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
607 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
|
608 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
609 // 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
|
610 // 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
|
611 // 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
|
612 // 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
|
613 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
614 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
|
615 } |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
616 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
617 %{ |
1 | 618 // 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
|
619 // need to know if the next token is '=' or '=='. |
1 | 620 // |
621 // It would have been so much easier if the delimiters were simply | |
622 // different for the expression on the left hand side of the equals | |
623 // operator. | |
971 | 624 // |
625 // It's also a pain in the ass to decide whether to insert a comma | |
626 // after seeing a ']' character... | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
627 |
17861
870f3e12e163
maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
628 // FIXME: we need to handle block comments here. |
968 | 629 %} |
630 | |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
631 <MATRIX_START>\] { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
632 curr_lexer->lexer_debug ("<MATRIX_START>\\]"); |
8535 | 633 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
634 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
|
635 return curr_lexer->handle_close_bracket (']'); |
4608 | 636 } |
637 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
638 %{ |
17861
870f3e12e163
maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
639 // 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
|
640 %} |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
641 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
642 <MATRIX_START>\} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
643 curr_lexer->lexer_debug ("<MATRIX_START>\\}*"); |
8535 | 644 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
645 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
|
646 return curr_lexer->handle_close_bracket ('}'); |
967 | 647 } |
1 | 648 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
649 \[ { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
650 curr_lexer->lexer_debug ("\\["); |
8535 | 651 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
652 bool unput_comma = false; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
653 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
654 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
655 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
656 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
657 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
658 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
659 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
660 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
661 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
662 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
663 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
664 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
665 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
666 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
667 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
668 } |
5615 | 669 else |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
670 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
671 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
|
672 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
673 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
|
674 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
675 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
|
676 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
677 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
|
678 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
|
679 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
680 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
|
681 && ! 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
|
682 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
|
683 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
684 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
|
685 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
686 curr_lexer->m_bracketflag++; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
687 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
688 curr_lexer->push_start_state (MATRIX_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
689 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
690 return curr_lexer->count_token ('['); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
691 } |
967 | 692 } |
1 | 693 |
968 | 694 \] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
695 curr_lexer->lexer_debug ("\\]"); |
8535 | 696 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
697 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
|
698 |
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_nesting_level.remove (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
700 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
701 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
|
702 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
703 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
|
704 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
|
705 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
706 return curr_lexer->handle_token (']'); |
968 | 707 } |
708 | |
709 %{ | |
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
|
710 // 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
|
711 // 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
|
712 // 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
|
713 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
714 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
715 %{ |
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
|
716 // 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
|
717 // 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
|
718 // 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
|
719 // 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
|
720 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
721 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
722 ^{S}*{CCHAR}\{{S}*{NL} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
723 curr_lexer->lexer_debug ("^{S}*{CCHAR}\\{{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
724 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
725 yyless (0); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
726 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
727 curr_lexer->push_start_state (BLOCK_COMMENT_START); |
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 <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
|
731 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
|
732 |
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
|
733 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
|
734 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
735 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
|
736 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
|
737 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
738 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
|
739 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
740 HANDLE_EOB_OR_EOF (-1); |
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 |
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 // 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
|
745 // 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
|
746 // 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
|
747 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
748 // 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
|
749 // 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
|
750 // follows. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
751 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
752 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
753 <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
|
754 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
|
755 |
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
|
756 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
|
757 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
758 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
|
759 curr_lexer->m_comment_text = "\n"; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
760 else |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
761 curr_lexer->finish_comment (octave::comment_elt::block); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
762 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
763 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
|
764 |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
765 int status = -1; |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
766 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
767 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
|
768 { |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
769 status = -2; |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
770 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
771 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
|
772 } |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
773 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
774 HANDLE_EOB_OR_EOF (status); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
775 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
776 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
777 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
778 // Body of a block comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
779 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
780 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
781 <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
|
782 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
|
783 |
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
|
784 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
|
785 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
|
786 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28112
diff
changeset
|
787 HANDLE_EOB_OR_EOF (-1); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
788 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
789 |
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 // Full-line or end-of-line comment. |
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 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
794 {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
|
795 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
|
796 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
797 curr_lexer->push_start_state (LINE_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
798 yyless (0); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
799 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
800 |
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
|
801 %{ |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
802 // 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
|
803 // 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
|
804 // 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
|
805 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
806 // 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
|
807 // 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
|
808 // 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
|
809 %} |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
810 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
811 <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
|
812 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
|
813 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
814 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
|
815 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
|
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 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
|
818 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
|
819 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
|
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 |
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 %{ |
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 // 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
|
824 // 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
|
825 // 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
|
826 // 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
|
827 // 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
|
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 // 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
|
830 // 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
|
831 // 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
|
832 %} |
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 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
834 <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
|
835 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
|
836 |
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
|
837 // 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
|
838 // 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
|
839 |
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
|
840 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
|
841 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
|
842 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
|
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 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
|
845 |
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 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
|
847 i++; |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
848 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
849 curr_lexer->m_comment_text += &yytext[i]; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
850 |
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
|
851 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
|
852 { |
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
|
853 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
|
854 } |
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
855 else |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
856 { |
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
|
857 // 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
|
858 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
859 if (have_space) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
860 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
|
861 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
862 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
|
863 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
864 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
|
865 |
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
|
866 // 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
|
867 // 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
|
868 // 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
|
869 |
16337
6bfd8dbd7d3c
don't swallow statements that follow comment lines (bug #38549)
John W. Eaton <jwe@octave.org>
parents:
16334
diff
changeset
|
870 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
|
871 |
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 // 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
|
873 // 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
|
874 // 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
|
875 curr_lexer->m_filepos.increment_column (yyleng); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
876 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
877 } |
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 %{ |
27760
16e83787f970
fix handling of full line comments at command prompt (bug #57208)
John W. Eaton <jwe@octave.org>
parents:
27736
diff
changeset
|
880 // 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
|
881 // found on the input stream. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
882 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
883 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
884 <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
|
885 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
|
886 |
28264
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
887 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
|
888 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
889 // 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
|
890 // 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
|
891 // 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
|
892 // 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
|
893 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
894 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
|
895 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
896 // 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
|
897 // 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
|
898 // 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
|
899 // 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
|
900 // 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
|
901 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
902 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
|
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 else |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
905 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
906 // 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
|
907 // 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
|
908 // 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
|
909 // 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
|
910 // statement. |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
911 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
912 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
|
913 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
914 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
|
915 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
916 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
|
917 } |
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 // 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
|
922 // 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
|
923 // 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
|
924 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
925 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
|
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->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
|
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->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
|
930 } |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
931 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
932 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
933 %{ |
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
|
934 // 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
|
935 %} |
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
|
936 |
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
|
937 <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
|
938 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
|
939 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
940 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
|
941 |
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
|
942 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
|
943 } |
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
|
944 |
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
|
945 %{ |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
946 // Double-quoted character strings. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
947 %} |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
948 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
949 <DQ_STRING_START>\"\" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
950 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
|
951 |
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
|
952 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
|
953 curr_lexer->m_string_text += '"'; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
954 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
955 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
956 <DQ_STRING_START>\" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
957 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
|
958 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
959 // 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
|
960 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
|
961 curr_lexer->m_filepos.increment_column (); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
962 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
963 curr_lexer->pop_start_state (); |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
964 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
965 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
|
966 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
967 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
|
968 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
|
969 |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
970 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
|
971 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
|
972 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
|
973 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
|
974 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
975 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
|
976 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
977 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
|
978 } |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
979 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
980 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
981 <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
|
982 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
|
983 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
984 curr_lexer->update_token_positions (yyleng); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
985 |
26450
af7faef288ad
lex.ll: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
986 unsigned int result; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
987 sscanf (yytext+1, "%o", &result); |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
988 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
989 if (result > 0xff) |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
990 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
991 // 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
|
992 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
993 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
994 "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
|
995 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
|
996 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
997 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
998 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
999 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
|
1000 } |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1001 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1002 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
|
1003 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1004 |
17244
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1005 <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
|
1006 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
|
1007 |
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
|
1008 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
|
1009 |
26450
af7faef288ad
lex.ll: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
1010 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
|
1011 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
|
1012 |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1013 // 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
|
1014 // 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
|
1015 // 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
|
1016 // 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
|
1017 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
|
1018 } |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
1019 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1020 <DQ_STRING_START>"\\a" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1021 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
|
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); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1024 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
|
1025 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1026 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1027 <DQ_STRING_START>"\\b" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1028 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
|
1029 |
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
|
1030 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
|
1031 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
|
1032 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1033 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1034 <DQ_STRING_START>"\\f" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1035 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
|
1036 |
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
|
1037 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
|
1038 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
|
1039 } |
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 <DQ_STRING_START>"\\n" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1042 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
|
1043 |
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
|
1044 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
|
1045 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
|
1046 } |
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 <DQ_STRING_START>"\\r" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1049 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
|
1050 |
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
|
1051 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
|
1052 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
|
1053 } |
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 <DQ_STRING_START>"\\t" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1056 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
|
1057 |
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
|
1058 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
|
1059 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
|
1060 } |
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 <DQ_STRING_START>"\\v" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1063 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
|
1064 |
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
|
1065 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
|
1066 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
|
1067 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1068 |
18428
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1069 <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
|
1070 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
|
1071 |
29297
cff933892ec2
Deprecate '...' line continuations in double-quoted strings.
Rik <rik@octave.org>
parents:
28774
diff
changeset
|
1072 /* FIXME: Remove support for '...' continuation in Octave 9 */ |
cff933892ec2
Deprecate '...' line continuations in double-quoted strings.
Rik <rik@octave.org>
parents:
28774
diff
changeset
|
1073 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
|
1074 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1075 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
|
1076 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1077 if (nm.empty ()) |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1078 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
|
1079 else |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1080 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
|
1081 "%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
|
1082 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
|
1083 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1084 HANDLE_STRING_CONTINUATION; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1085 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1086 |
18428
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1087 <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
|
1088 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
|
1089 |
29304
01679f865fc7
Deprecate obsolete warning messages in lex.ll.
Rik <rik@octave.org>
parents:
29298
diff
changeset
|
1090 /* 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
|
1091 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
|
1092 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1093 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
|
1094 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1095 if (nm.empty ()) |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1096 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
|
1097 else |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1098 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
|
1099 "%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
|
1100 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
|
1101 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1102 HANDLE_STRING_CONTINUATION; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1103 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1104 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1105 <DQ_STRING_START>\\{NL} { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1106 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
|
1107 |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1108 HANDLE_STRING_CONTINUATION; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1109 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1110 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1111 <DQ_STRING_START>\\. { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1112 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
|
1113 |
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
|
1114 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
|
1115 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
|
1116 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1117 |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1118 <DQ_STRING_START>\. { |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1119 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
|
1120 |
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
|
1121 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
|
1122 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
|
1123 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1124 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1125 <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
|
1126 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
|
1127 |
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
|
1128 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
|
1129 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
|
1130 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1131 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1132 <DQ_STRING_START>{NL} { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1133 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
|
1134 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1135 // 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
|
1136 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1137 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1138 "unterminated character string constant", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1139 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
|
1140 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1141 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
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.next_line (); |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1144 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1145 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
|
1146 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1147 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1148 %{ |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1149 // Single-quoted character strings. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1150 %} |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1151 |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1152 <SQ_STRING_START>\'\' { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1153 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
|
1154 |
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
|
1155 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
|
1156 curr_lexer->m_string_text += '\''; |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1157 } |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1158 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1159 <SQ_STRING_START>\' { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1160 curr_lexer->lexer_debug ("<SQ_STRING_START>\\'"); |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1161 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1162 // 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
|
1163 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
|
1164 curr_lexer->m_filepos.increment_column (); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1165 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1166 curr_lexer->pop_start_state (); |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1167 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1168 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
|
1169 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1170 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
|
1171 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
|
1172 |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1173 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
|
1174 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
|
1175 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
|
1176 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
|
1177 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1178 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
|
1179 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1180 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
|
1181 } |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1182 } |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1183 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1184 <SQ_STRING_START>[^\'\n\r]+ { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1185 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
|
1186 |
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
|
1187 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
|
1188 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
|
1189 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1190 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1191 <SQ_STRING_START>{NL} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1192 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
|
1193 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1194 // 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
|
1195 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1196 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1197 "unterminated character string constant", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1198 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
|
1199 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1200 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
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.next_line (); |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1203 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1204 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
|
1205 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1206 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1207 %{ |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1208 // Fully-qualified identifiers (used for classdef). |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1209 %} |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1210 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1211 <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
|
1212 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
|
1213 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1214 curr_lexer->pop_start_state (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1215 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1216 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
|
1217 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1218 int id_tok = curr_lexer->handle_fq_identifier (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1219 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1220 if (id_tok >= 0) |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1221 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1222 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
|
1223 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1224 return curr_lexer->count_token_internal (id_tok); |
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 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1227 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1228 <FQ_IDENT_START>{S}+ { |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1229 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
|
1230 |
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
|
1231 curr_lexer->m_filepos.increment_column (yyleng); |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1232 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1233 curr_lexer->mark_previous_token_trailing_space (); |
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 |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1236 <FQ_IDENT_START>(\.\.\.){ANY_EXCEPT_NL}*{NL} { |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1237 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
|
1238 |
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
|
1239 curr_lexer->m_filepos.next_line (); |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1240 } |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1241 |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1242 <FQ_IDENT_START>{ANY_INCLUDING_NL} { |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1243 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
|
1244 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1245 // 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
|
1246 // start state. |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1247 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1248 yyless (0); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1249 curr_lexer->pop_start_state (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1250 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1251 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1252 {BINARY_NUMBER} { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1253 HANDLE_NUMBER ("{BINARY_NUMBER}", 2); |
968 | 1254 } |
1255 | |
1256 %{ | |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1257 // 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
|
1258 // 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
|
1259 // 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
|
1260 // expression like "13./x"). |
968 | 1261 %} |
1262 | |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1263 {DECIMAL_DIGITS}/\.[\*/\\^\'] | |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1264 {DECIMAL_NUMBER} { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1265 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
|
1266 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1267 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1268 {HEXADECIMAL_NUMBER} { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
1269 HANDLE_NUMBER ("{HEXADECIMAL_NUMBER}", 16); |
968 | 1270 } |
1271 | |
1272 %{ | |
1273 // Eat whitespace. Whitespace inside matrix constants is handled by | |
4208 | 1274 // the <MATRIX_START> start state code above. |
968 | 1275 %} |
1276 | |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
1277 {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
|
1278 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
|
1279 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1280 curr_lexer->mark_previous_token_trailing_space (); |
967 | 1281 } |
1282 | |
968 | 1283 %{ |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1284 // 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
|
1285 %} |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1286 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
1287 \.\.\.{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
|
1288 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
|
1289 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1290 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
|
1291 } |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1292 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1293 %{ |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1294 // Deprecated C preprocessor style continuation markers. |
968 | 1295 %} |
1296 | |
17246
8be8a65d3ca8
Ignore anything after the continuation marker '...' (bug #38653)
Stefan Mahr <dac922@gmx.de>
parents:
17244
diff
changeset
|
1297 \\{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
|
1298 \\{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
|
1299 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
|
1300 |
29304
01679f865fc7
Deprecate obsolete warning messages in lex.ll.
Rik <rik@octave.org>
parents:
29298
diff
changeset
|
1301 /* 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
|
1302 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
|
1303 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1304 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
|
1305 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1306 if (nm.empty ()) |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1307 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
|
1308 else |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1309 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
|
1310 "%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
|
1311 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
|
1312 |
6470a113eae2
correctly handle deprecated \ continuation markers
John W. Eaton <jwe@octave.org>
parents:
17247
diff
changeset
|
1313 curr_lexer->handle_continuation (); |
967 | 1314 } |
1 | 1315 |
968 | 1316 %{ |
1317 // End of file. | |
1318 %} | |
1319 | |
967 | 1320 <<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
|
1321 return curr_lexer->handle_end_of_input (); |
967 | 1322 } |
1 | 1323 |
968 | 1324 %{ |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
1325 // 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
|
1326 |
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1327 // 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
|
1328 // followed by "(". |
968 | 1329 %} |
1330 | |
21705
764e586dca4b
Avoid use of REJECT in parser (bug #45947).
Rik <rik@octave.org>
parents:
21635
diff
changeset
|
1331 (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
|
1332 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
|
1333 } |
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1334 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1335 {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
|
1336 HANDLE_IDENTIFIER ("{IDENT}", false); |
967 | 1337 } |
1 | 1338 |
968 | 1339 %{ |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1340 // Superclass method identifiers. |
9476 | 1341 %} |
1342 | |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1343 {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
|
1344 curr_lexer->lexer_debug ("{FQIDENT}{S}*@{S}*{FQIDENT}"); |
9476 | 1345 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1346 if (curr_lexer->previous_token_may_be_command ()) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1347 { |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1348 yyless (0); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1349 curr_lexer->push_start_state (COMMAND_START); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1350 } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1351 else |
9476 | 1352 { |
26899
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1353 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
|
1354 { |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1355 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
|
1356 |
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
|
1357 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
|
1358 |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1359 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
|
1360 { |
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
|
1361 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
|
1362 |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1363 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
|
1364 { |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1365 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
|
1366 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
|
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 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
|
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 } |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1371 } |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1372 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1373 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
|
1374 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
|
1375 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1376 return curr_lexer->handle_superclass_identifier (); |
9476 | 1377 } |
1378 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1379 |
9476 | 1380 %{ |
1381 // Metaclass query | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1382 %} |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1383 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1384 \?{S}*{FQIDENT} { |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1385 curr_lexer->lexer_debug ("\\?{S}*{FQIDENT}"); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1386 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1387 if (curr_lexer->previous_token_may_be_command () |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1388 && curr_lexer->space_follows_previous_token ()) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1389 { |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1390 yyless (0); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1391 curr_lexer->push_start_state (COMMAND_START); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1392 } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1393 else |
9476 | 1394 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1395 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
|
1396 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1397 int id_tok = curr_lexer->handle_meta_identifier (); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1398 |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1399 if (id_tok >= 0) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1400 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1401 curr_lexer->m_looking_for_object_index = true; |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1402 |
16683
e1c6ad54259f
maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
diff
changeset
|
1403 return curr_lexer->count_token_internal (id_tok); |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1404 } |
9476 | 1405 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1406 } |
9476 | 1407 |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1408 \@ | |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1409 \@{S}*{FQIDENT} { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1410 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
|
1411 |
16334
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1412 if (curr_lexer->previous_token_may_be_command () |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1413 && curr_lexer->space_follows_previous_token ()) |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1414 { |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1415 yyless (0); |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1416 curr_lexer->push_start_state (COMMAND_START); |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1417 } |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1418 else |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1419 { |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1420 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
|
1421 |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1422 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
|
1423 && 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
|
1424 && ! (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
|
1425 || 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
|
1426 { |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1427 yyless (0); |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
1428 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
|
1429 } |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1430 else |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1431 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1432 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
|
1433 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1434 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
|
1435 |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1436 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
|
1437 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1438 if (ident == "@") |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1439 { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1440 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
|
1441 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
|
1442 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1443 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
|
1444 } |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1445 else |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1446 { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1447 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
|
1448 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
|
1449 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
|
1450 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1451 octave::token *tok; |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1452 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
1453 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
|
1454 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
|
1455 "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
|
1456 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
|
1457 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
|
1458 else |
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 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
|
1461 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1462 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
|
1463 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
|
1464 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
|
1465 } |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1466 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1467 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
|
1468 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1469 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
|
1470 } |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1471 } |
16334
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1472 } |
4342 | 1473 } |
1474 | |
1475 %{ | |
968 | 1476 // A new line character. New line characters inside matrix constants |
4208 | 1477 // are handled by the <MATRIX_START> start state code above. If closest |
985 | 1478 // nesting is inside parentheses, don't return a row separator. |
968 | 1479 %} |
1480 | |
967 | 1481 {NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1482 curr_lexer->lexer_debug ("{NL}"); |
8535 | 1483 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1484 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
|
1485 { |
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
|
1486 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
|
1487 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1488 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
|
1489 curr_lexer->warn_language_extension |
16309
e608de76742c
allow newline to terminate anonymous function definition
John W. Eaton <jwe@octave.org>
parents:
16299
diff
changeset
|
1490 ("bare newline inside parentheses"); |
e608de76742c
allow newline to terminate anonymous function definition
John W. Eaton <jwe@octave.org>
parents:
16299
diff
changeset
|
1491 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1492 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
|
1493 || 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
|
1494 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1495 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
|
1496 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
|
1497 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1498 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
|
1499 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1500 return curr_lexer->count_token ('\n'); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
1501 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1502 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
|
1503 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1504 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
|
1505 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
|
1506 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1507 // 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
|
1508 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1509 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1510 "unexpected internal lexer error", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1511 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
|
1512 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1513 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1514 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1515 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
|
1516 } |
967 | 1517 } |
1 | 1518 |
968 | 1519 %{ |
1520 // 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
|
1521 // operator. |
968 | 1522 %} |
1523 | |
967 | 1524 "'" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1525 curr_lexer->lexer_debug ("'"); |
8535 | 1526 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1527 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
|
1528 && curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1529 { |
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
|
1530 curr_lexer->m_filepos.increment_column (); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1531 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
|
1532 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
|
1533 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1534 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
|
1535 { |
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
|
1536 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
|
1537 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
|
1538 } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1539 else |
967 | 1540 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1541 int tok = curr_lexer->previous_token_value (); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1542 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1543 if (curr_lexer->whitespace_is_significant ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1544 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1545 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
|
1546 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1547 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1548 || curr_lexer->previous_token_is_binop ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1549 { |
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
|
1550 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
|
1551 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
|
1552 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1553 else |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1554 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1555 yyless (0); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1556 curr_lexer->xunput (','); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1557 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1558 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1559 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1560 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1561 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1562 || curr_lexer->previous_token_is_binop () |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1563 || curr_lexer->previous_token_is_keyword ()) |
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 |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1569 { |
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
|
1570 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
|
1571 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
|
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 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1575 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1576 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1577 if (! tok || tok == '[' || tok == '{' || tok == '(' |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1578 || curr_lexer->previous_token_is_binop () |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1579 || curr_lexer->previous_token_is_keyword ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1580 { |
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
|
1581 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
|
1582 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
|
1583 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1584 else |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1585 { |
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
|
1586 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
|
1587 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
|
1588 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1589 } |
967 | 1590 } |
1591 } | |
1 | 1592 |
968 | 1593 %{ |
971 | 1594 // Double quotes always begin strings. |
1595 %} | |
1596 | |
973 | 1597 \" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1598 curr_lexer->lexer_debug ("\\\""); |
8535 | 1599 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1600 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
|
1601 && curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1602 { |
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
|
1603 curr_lexer->m_filepos.increment_column (); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1604 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
|
1605 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
|
1606 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1607 else |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1608 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1609 int tok = curr_lexer->previous_token_value (); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1610 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1611 if (curr_lexer->whitespace_is_significant ()) |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1612 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1613 if (curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1614 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1615 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1616 || curr_lexer->previous_token_is_binop ()) |
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 (); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1619 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
|
1620 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1621 else |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1622 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1623 yyless (0); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1624 curr_lexer->xunput (','); |
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 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1627 else |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1628 { |
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
|
1629 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
|
1630 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
|
1631 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1632 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1633 else |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1634 { |
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
|
1635 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
|
1636 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
|
1637 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1638 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1639 } |
971 | 1640 |
1641 %{ | |
968 | 1642 // Other operators. |
1643 %} | |
1644 | |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1645 ":" { CMD_OR_OP (":", ':', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1646 ".+" { CMD_OR_OP (".+", EPLUS, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1647 ".-" { CMD_OR_OP (".-", EMINUS, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1648 ".*" { CMD_OR_OP (".*", EMUL, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1649 "./" { CMD_OR_OP ("./", EDIV, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1650 ".\\" { CMD_OR_OP (".\\", ELEFTDIV, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1651 ".^" { CMD_OR_OP (".^", EPOW, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1652 ".**" { CMD_OR_OP (".**", EPOW, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1653 "<=" { CMD_OR_OP ("<=", EXPR_LE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1654 "==" { CMD_OR_OP ("==", EXPR_EQ, true); } |
27975
6931d95d1967
Use "!=" in preference to "~=" everywhere in code.
Rik <rik@octave.org>
parents:
27925
diff
changeset
|
1655 "!=" { CMD_OR_OP ("!=", EXPR_NE, false); } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1656 "~=" { CMD_OR_OP ("~=", EXPR_NE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1657 ">=" { CMD_OR_OP (">=", EXPR_GE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1658 "&" { CMD_OR_OP ("&", EXPR_AND, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1659 "|" { CMD_OR_OP ("|", EXPR_OR, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1660 "<" { CMD_OR_OP ("<", EXPR_LT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1661 ">" { CMD_OR_OP (">", EXPR_GT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1662 "*" { CMD_OR_OP ("*", '*', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1663 "/" { CMD_OR_OP ("/", '/', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1664 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1665 %{ |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1666 // In Matlab, '\' may also trigger command syntax. |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1667 %} |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1668 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1669 "\\" { |
29926
6a39ac893c9d
note future change for backslash operator
John W. Eaton <jwe@octave.org>
parents:
29924
diff
changeset
|
1670 // FIXME: After backslash is no longer handled as a line |
6a39ac893c9d
note future change for backslash operator
John W. Eaton <jwe@octave.org>
parents:
29924
diff
changeset
|
1671 // continuation marker outside of character strings, this |
6a39ac893c9d
note future change for backslash operator
John W. Eaton <jwe@octave.org>
parents:
29924
diff
changeset
|
1672 // action may be replaced with |
6a39ac893c9d
note future change for backslash operator
John W. Eaton <jwe@octave.org>
parents:
29924
diff
changeset
|
1673 // |
6a39ac893c9d
note future change for backslash operator
John W. Eaton <jwe@octave.org>
parents:
29924
diff
changeset
|
1674 // CMD_OR_OP ("\\", LEFTDIV, true); |
6a39ac893c9d
note future change for backslash operator
John W. Eaton <jwe@octave.org>
parents:
29924
diff
changeset
|
1675 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1676 curr_lexer->lexer_debug ("\\"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1677 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1678 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
|
1679 } |
16275
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 "^" { CMD_OR_OP ("^", POW, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1682 "**" { CMD_OR_OP ("**", POW, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1683 "&&" { CMD_OR_OP ("&&", EXPR_AND_AND, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1684 "||" { 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
|
1685 |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1686 ";" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1687 curr_lexer->lexer_debug (";"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1688 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1689 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1690 = (! (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
|
1691 || 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
|
1692 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1693 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
|
1694 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1695 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1696 "+" { CMD_OR_UNARY_OP ("+", '+', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1697 "-" { CMD_OR_UNARY_OP ("-", '-', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1698 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1699 "~" { CMD_OR_UNARY_OP ("~", EXPR_NOT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1700 "!" { 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
|
1701 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1702 "," { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1703 curr_lexer->lexer_debug (","); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1704 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1705 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1706 = (! (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
|
1707 || 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
|
1708 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1709 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
|
1710 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1711 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1712 ".'" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1713 curr_lexer->lexer_debug (".'"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1714 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1715 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
|
1716 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1717 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1718 "++" { CMD_OR_UNARY_OP ("++", PLUS_PLUS, false); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1719 "--" { CMD_OR_UNARY_OP ("--", MINUS_MINUS, false); } |
1 | 1720 |
967 | 1721 "(" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1722 curr_lexer->lexer_debug ("("); |
8535 | 1723 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1724 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1725 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1726 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1727 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1728 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1729 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1730 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1731 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1732 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1733 unput_comma = true; |
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 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1736 if (unput_comma) |
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 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1739 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1740 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1741 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1742 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1743 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
|
1744 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1745 // 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
|
1746 // 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
|
1747 // 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
|
1748 // the matching close paren). |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1749 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1750 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
|
1751 (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
|
1752 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1753 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
|
1754 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
|
1755 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
|
1756 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1757 curr_lexer->m_nesting_level.paren (); |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1758 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1759 return curr_lexer->handle_token ('('); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1760 } |
967 | 1761 } |
1762 | |
1763 ")" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1764 curr_lexer->lexer_debug (")"); |
8535 | 1765 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1766 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
|
1767 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1768 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
|
1769 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1770 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
|
1771 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1772 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
|
1773 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
|
1774 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1775 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
|
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_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
|
1778 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
|
1779 } |
13237
1bfca2bbea8b
fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents:
12801
diff
changeset
|
1780 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1781 return curr_lexer->count_token (')'); |
967 | 1782 } |
1783 | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1784 "." { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1785 curr_lexer->lexer_debug ("."); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1786 |
16325
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1787 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
|
1788 && curr_lexer->space_follows_previous_token ()) |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1789 { |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1790 yyless (0); |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1791 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
|
1792 } |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1793 else |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1794 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1795 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
|
1796 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1797 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
|
1798 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
|
1799 |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1800 return curr_lexer->handle_token ('.'); |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1801 } |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1802 } |
8535 | 1803 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1804 %{ |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1805 // = and op= operators. |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1806 %} |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1807 |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1808 "=" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1809 curr_lexer->lexer_debug ("="); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1810 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1811 return curr_lexer->handle_op ('='); |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1812 } |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1813 |
29900
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1814 "+=" { CMD_OR_OP ("+=", ADD_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1815 "-=" { CMD_OR_OP ("-=", SUB_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1816 "*=" { CMD_OR_OP ("*=", MUL_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1817 "/=" { CMD_OR_OP ("/=", DIV_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1818 "\\=" { CMD_OR_OP ("\\=", LEFTDIV_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1819 ".+=" { CMD_OR_OP (".+=", ADD_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1820 ".-=" { CMD_OR_OP (".-=", SUB_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1821 ".*=" { CMD_OR_OP (".*=", EMUL_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1822 "./=" { CMD_OR_OP ("./=", EDIV_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1823 ".\\=" { CMD_OR_OP (".\\=", ELEFTDIV_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1824 "^=" { CMD_OR_OP ("^=", POW_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1825 "**=" { CMD_OR_OP ("^=", POW_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1826 ".^=" { CMD_OR_OP (".^=", EPOW_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1827 ".**=" { CMD_OR_OP (".^=", EPOW_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1828 "&=" { CMD_OR_OP ("&=", AND_EQ, false); } |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
1829 "|=" { CMD_OR_OP ("|=", OR_EQ, false); } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1830 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1831 %{ |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1832 // In Matlab, '{' may also trigger command syntax. |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1833 %} |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1834 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1835 "{" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1836 curr_lexer->lexer_debug ("{"); |
8535 | 1837 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1838 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1839 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1840 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1841 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1842 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1843 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1844 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1845 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1846 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1847 unput_comma = true; |
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 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1850 if (unput_comma) |
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 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1853 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1854 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1855 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1856 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1857 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
|
1858 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1859 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
|
1860 (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
|
1861 |
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
|
1862 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
|
1863 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
|
1864 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
|
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_braceflag++; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1867 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1868 curr_lexer->push_start_state (MATRIX_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1869 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1870 return curr_lexer->count_token ('{'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1871 } |
3351 | 1872 } |
1873 | |
1874 "}" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1875 curr_lexer->lexer_debug ("}"); |
8535 | 1876 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1877 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
|
1878 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1879 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
|
1880 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1881 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
|
1882 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
|
1883 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1884 curr_lexer->m_nesting_level.remove (); |
3351 | 1885 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1886 return curr_lexer->handle_token ('}'); |
3351 | 1887 } |
1888 | |
968 | 1889 %{ |
29915
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1890 // Unrecognized input. If the previous token may be a command and is |
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1891 // followed by a space, parse the remainder of this statement as a |
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1892 // command-style function call. Otherwise, unrecognized input is a |
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1893 // lexical error. |
968 | 1894 %} |
1 | 1895 |
2042 | 1896 . { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1897 curr_lexer->lexer_debug ("."); |
8535 | 1898 |
29924
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1899 curr_lexer->xunput (yytext[0]); |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1900 |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1901 int c = curr_lexer->text_yyinput (); |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1902 |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1903 if (c == 1) |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1904 return -1; |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1905 else if (c == EOF) |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1906 return curr_lexer->handle_end_of_input (); |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1907 else if (curr_lexer->previous_token_may_be_command () |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1908 && curr_lexer->space_follows_previous_token ()) |
29915
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1909 { |
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1910 yyless (0); |
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1911 curr_lexer->push_start_state (COMMAND_START); |
28a39ddabbfc
allow unrecognized characters to begin command-style function call parsing
John W. Eaton <jwe@octave.org>
parents:
29903
diff
changeset
|
1912 } |
16294
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1913 else |
4240 | 1914 { |
29924
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1915 std::ostringstream buf; |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1916 |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1917 buf << "invalid character '" |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1918 << octave::undo_string_escape (static_cast<char> (c)) |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1919 << "' (ASCII " << c << ")"; |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1920 |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1921 // Use current file position for error token. |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1922 octave::token *tok |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1923 = new octave::token (LEXICAL_ERROR, buf.str (), |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1924 curr_lexer->m_filepos, curr_lexer->m_filepos); |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1925 |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1926 curr_lexer->push_token (tok); |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1927 |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1928 curr_lexer->m_filepos.increment_column (); |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1929 |
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
1930 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
4240 | 1931 } |
29924
aeba7278cf80
fix logic error in changeset 28a39ddabbfc
John W. Eaton <jwe@octave.org>
parents:
29915
diff
changeset
|
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 |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29926
diff
changeset
|
2113 OCTAVE_NAMESPACE_BEGIN |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29926
diff
changeset
|
2114 |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2115 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
|
2116 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
|
2117 @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
|
2118 @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
|
2119 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
|
2120 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2121 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
|
2122 @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
|
2123 @end deftypefn */) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2124 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2125 octave_value retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2126 |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2127 int nargin = args.length (); |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2128 |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2129 if (nargin > 1) |
20798
bb585db6dee2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20773
diff
changeset
|
2130 print_usage (); |
bb585db6dee2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20773
diff
changeset
|
2131 |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2132 if (nargin == 0) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2133 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2134 // 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
|
2135 // iskeyword function for additional details. |
16114
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 string_vector lst (TOTAL_KEYWORDS); |
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 int j = 0; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2140 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2141 for (int i = 0; i < TOTAL_KEYWORDS; i++) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2142 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2143 std::string kword = wordlist[i].name; |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2144 |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2145 // 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
|
2146 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
|
2147 || 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
|
2148 || kword == "methods" || kword == "properties")) |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2149 lst[j++] = kword; |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2150 } |
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 lst.resize (j); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2153 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2154 retval = Cell (lst.sort ()); |
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 else |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2157 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2158 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
|
2159 retval = octave::iskeyword (name); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2160 } |
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 return retval; |
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 /* |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2166 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2167 %!assert (iskeyword ("for")) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2168 %!assert (iskeyword ("fort"), false) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2169 %!assert (iskeyword ("fft"), false) |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2170 %!assert (iskeyword ("get"), false) |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2171 %!assert (iskeyword ("set"), false) |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2172 |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2173 %!error iskeyword ("A", "B") |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2174 %!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
|
2175 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2176 */ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
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); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2224 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2225 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2226 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2227 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
|
2228 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2229 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
|
2230 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
|
2231 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
|
2232 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
|
2233 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
|
2234 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
|
2235 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
|
2236 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
|
2237 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
|
2238 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
|
2239 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
|
2240 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
|
2241 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
|
2242 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
|
2243 m_parsing_classdef = false; |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
2244 m_parsing_classdef_decl = false; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
2245 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
|
2246 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
|
2247 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
|
2248 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
|
2249 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
|
2250 m_force_script = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2251 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
|
2252 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
|
2253 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
|
2254 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
|
2255 m_bracketflag = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2256 m_braceflag = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2257 m_looping = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2258 m_defining_func = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2259 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
|
2260 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
|
2261 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
|
2262 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
|
2263 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
|
2264 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
|
2265 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
|
2266 m_string_text = ""; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2267 m_current_input_line = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2268 m_comment_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2269 m_help_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2270 m_function_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2271 m_fcn_file_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2272 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
|
2273 m_dir_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2274 m_package_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2275 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
|
2276 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
|
2277 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2278 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
|
2279 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
|
2280 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2281 m_symtab_context.clear (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2282 m_nesting_level.reset (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2283 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
|
2284 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2285 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2286 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2287 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
|
2288 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2289 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
|
2290 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
|
2291 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2292 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2293 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2294 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
|
2295 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2296 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
|
2297 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
|
2298 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2299 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2300 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2301 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
|
2302 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2303 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
|
2304 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
|
2305 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
|
2306 } |
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 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2309 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
|
2310 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2311 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
|
2312 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
|
2313 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2314 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2315 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2316 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
|
2317 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2318 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
|
2319 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2320 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
|
2321 || 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
|
2322 || 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
|
2323 || 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
|
2324 || 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
|
2325 || 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
|
2326 || 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
|
2327 || 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
|
2328 || 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
|
2329 || 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
|
2330 || 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
|
2331 || 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
|
2332 || 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
|
2333 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2334 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2335 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2336 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
|
2337 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2338 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
|
2339 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
|
2340 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2341 |
29864
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2342 void |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2343 lexical_feedback::mark_as_variable (const std::string& nm) |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2344 { |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2345 symbol_scope scope = m_symtab_context.curr_scope (); |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2346 |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2347 if (scope) |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2348 scope.mark_as_variable (nm); |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2349 } |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2350 |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2351 void |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2352 lexical_feedback::mark_as_variables (const std::list<std::string>& lst) |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2353 { |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2354 symbol_scope scope = m_symtab_context.curr_scope (); |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2355 |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2356 if (scope) |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2357 scope.mark_as_variables (lst); |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2358 } |
e2e493712818
improve previous change for command syntax parsing (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29857
diff
changeset
|
2359 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2360 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2361 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
|
2362 { |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2363 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
|
2364 return false; |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2365 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2366 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
|
2367 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
|
2368 } |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
2369 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2370 static bool |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2371 looks_like_copyright (const std::string& s) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2372 { |
27925
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2373 if (s.empty ()) |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2374 return false; |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2375 |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2376 // 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
|
2377 // (including newlines) remains. |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2378 |
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
|
2379 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
|
2380 |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2381 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
|
2382 && (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
|
2383 || 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
|
2384 || s.substr (offset, 23) == "SPDX-License-Identifier")); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2385 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2386 |
23555
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2387 static bool |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2388 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
|
2389 { |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2390 return ((! s.empty ()) && (s[0] == '!')); |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2391 } |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2392 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2393 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2394 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
|
2395 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2396 m_buffer = input; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2397 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
|
2398 m_offset = 0; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2399 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
|
2400 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2401 |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2402 // 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
|
2403 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
|
2404 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
|
2405 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
|
2406 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2407 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
|
2408 |
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
|
2409 std::size_t len = 0; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2410 if (by_lines) |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2411 { |
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
|
2412 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
|
2413 len = (newline_pos != std::string::npos |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2414 ? newline_pos - m_offset + 1 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2415 : (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
|
2416 } |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2417 else |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2418 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
|
2419 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2420 assert (len > 0); |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2421 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
|
2422 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2423 m_chars_left -= len; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2424 m_offset += len; |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2425 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2426 // 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
|
2427 // line character. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2428 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2429 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
|
2430 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2431 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
|
2432 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2433 // 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
|
2434 // the buffer. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2435 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
|
2436 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2437 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2438 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2439 // 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
|
2440 // 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
|
2441 // to base_lexer::read. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2442 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2443 // 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
|
2444 // (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
|
2445 // 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
|
2446 // the next call. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2447 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2448 m_buffer = eol; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2449 m_chars_left = 1; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2450 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
|
2451 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2452 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2453 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2454 return len; |
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 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2457 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
|
2458 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2459 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
|
2460 } |
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 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2463 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
|
2464 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2465 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
|
2466 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2467 // 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
|
2468 // flex-generated lexer. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2469 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
|
2470 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2471 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
|
2472 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2473 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2474 // 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
|
2475 // 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
|
2476 // (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
|
2477 // 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
|
2478 // 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
|
2479 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2480 #define OCTAVE_YYG \ |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2481 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
|
2482 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2483 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2484 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
|
2485 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2486 // 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
|
2487 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
|
2488 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2489 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
|
2490 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2491 // 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
|
2492 // input. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2493 |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27086
diff
changeset
|
2494 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
|
2495 && ! (m_reading_fcn_file |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2496 || m_reading_classdef_file |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2497 || 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
|
2498 || 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
|
2499 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
|
2500 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2501 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
|
2502 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2503 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
|
2504 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2505 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2506 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2507 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
|
2508 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2509 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
|
2510 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2511 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
|
2512 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2513 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2514 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2515 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
|
2516 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2517 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
|
2518 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2519 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
|
2520 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2521 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2522 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2523 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
|
2524 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2525 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
|
2526 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2527 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
|
2528 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
|
2529 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2530 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
|
2531 { |
29368
30afb3804d6e
Use clearer warning message when block comment is unterminated at EOF (bug #59874).
Rik <rik@octave.org>
parents:
29359
diff
changeset
|
2532 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
|
2533 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2534 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
|
2535 && ! 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
|
2536 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
|
2537 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
|
2538 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2539 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2540 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
|
2541 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2542 push_token (tok_val); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2543 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2544 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
|
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 char * |
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::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
|
2549 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2550 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
|
2551 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2552 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2553 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2554 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
|
2555 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2556 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
|
2557 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2558 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2559 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2560 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
|
2561 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2562 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
|
2563 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2564 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
|
2565 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2566 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
|
2567 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
|
2568 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
|
2569 } |
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 // 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
|
2572 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2573 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
|
2574 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2575 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
|
2576 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2577 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
|
2578 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2579 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
|
2580 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
|
2581 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
|
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 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
|
2585 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2586 xunput (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2587 c = '\n'; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2588 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2589 } |
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 return c; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2592 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2593 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2594 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2595 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
|
2596 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2597 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
|
2598 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2599 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
|
2600 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2601 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
|
2602 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
|
2603 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
|
2604 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2605 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2606 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
|
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 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2610 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2611 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
|
2612 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2613 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
|
2614 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2615 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
|
2616 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2617 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2618 void |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2619 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
|
2620 { |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2621 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
|
2622 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
|
2623 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2624 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
|
2625 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
|
2626 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2627 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
|
2628 } |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2629 |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2630 bool |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2631 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
|
2632 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2633 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
|
2634 xunput (c); |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
2635 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
|
2636 } |
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 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2639 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
|
2640 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2641 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
|
2642 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2643 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
|
2644 { |
22872
551ac93c984c
maint: Use C++ range feature to simplify some for loops in libinterp/parse-tree
Rik <rik@octave.org>
parents:
22857
diff
changeset
|
2645 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
|
2646 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2647 retval = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2648 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2649 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2650 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2651 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2652 return retval; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2653 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2654 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2655 int |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
2656 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
|
2657 { |
28679
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2658 // 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
|
2659 // function is called. |
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2660 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2661 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
|
2662 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2663 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
|
2664 |
27770 | 2665 if (! kw) |
2666 return 0; | |
2667 | |
2668 bool previous_at_bos = m_at_beginning_of_statement; | |
2669 | |
2670 // May be reset to true for some token types. | |
2671 m_at_beginning_of_statement = false; | |
2672 | |
2673 token *tok_val = nullptr; | |
2674 | |
2675 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
|
2676 { |
27770 | 2677 case break_kw: |
2678 case catch_kw: | |
2679 case continue_kw: | |
2680 case else_kw: | |
2681 case otherwise_kw: | |
2682 case return_kw: | |
2683 case unwind_protect_cleanup_kw: | |
2684 m_at_beginning_of_statement = true; | |
2685 break; | |
2686 | |
2687 case persistent_kw: | |
2688 case global_kw: | |
2689 m_looking_at_decl_list = true; | |
2690 break; | |
2691 | |
2692 case case_kw: | |
2693 case elseif_kw: | |
2694 case until_kw: | |
2695 break; | |
2696 | |
2697 case end_kw: | |
2698 if (inside_any_object_index () | |
2699 || (m_defining_func | |
2700 && ! (m_looking_at_return_list | |
2701 || 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
|
2702 { |
27770 | 2703 m_at_beginning_of_statement = previous_at_bos; |
2704 return 0; | |
2705 } | |
2706 | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2707 tok_val = new token (end_kw, token::simple_end, m_tok_beg, m_tok_end); |
27770 | 2708 m_at_beginning_of_statement = true; |
2709 break; | |
2710 | |
2711 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
|
2712 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
|
2713 m_tok_end); |
27770 | 2714 m_at_beginning_of_statement = true; |
2715 break; | |
2716 | |
2717 case end_unwind_protect_kw: | |
2718 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
|
2719 token::unwind_protect_end, m_tok_beg, m_tok_end); |
27770 | 2720 m_at_beginning_of_statement = true; |
2721 break; | |
2722 | |
2723 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
|
2724 tok_val = new token (endfor_kw, token::for_end, m_tok_beg, m_tok_end); |
27770 | 2725 m_at_beginning_of_statement = true; |
2726 break; | |
2727 | |
2728 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
|
2729 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
|
2730 m_tok_end); |
27770 | 2731 m_at_beginning_of_statement = true; |
2732 break; | |
2733 | |
2734 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
|
2735 tok_val = new token (endif_kw, token::if_end, m_tok_beg, m_tok_end); |
27770 | 2736 m_at_beginning_of_statement = true; |
2737 break; | |
2738 | |
2739 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
|
2740 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
|
2741 m_tok_end); |
27770 | 2742 m_at_beginning_of_statement = true; |
2743 break; | |
2744 | |
2745 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
|
2746 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
|
2747 m_tok_end); |
27770 | 2748 m_at_beginning_of_statement = true; |
2749 break; | |
2750 | |
2751 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
|
2752 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
|
2753 m_tok_end); |
27770 | 2754 m_at_beginning_of_statement = true; |
2755 break; | |
2756 | |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2757 case endarguments_kw: |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2758 #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
|
2759 return 0; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2760 #else |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2761 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
|
2762 m_tok_end); |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2763 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
|
2764 break; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2765 #endif |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2766 |
27770 | 2767 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
|
2768 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
|
2769 m_tok_end); |
27770 | 2770 m_at_beginning_of_statement = true; |
2771 break; | |
2772 | |
2773 case endenumeration_kw: | |
2774 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
|
2775 m_tok_beg, m_tok_end); |
27770 | 2776 m_at_beginning_of_statement = true; |
2777 break; | |
2778 | |
2779 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
|
2780 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
|
2781 m_tok_end); |
27770 | 2782 m_at_beginning_of_statement = true; |
2783 break; | |
2784 | |
2785 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
|
2786 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
|
2787 m_tok_end); |
27770 | 2788 m_at_beginning_of_statement = true; |
2789 break; | |
2790 | |
2791 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
|
2792 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
|
2793 m_tok_end); |
27770 | 2794 m_at_beginning_of_statement = true; |
2795 break; | |
2796 | |
2797 case for_kw: | |
2798 case parfor_kw: | |
2799 case while_kw: | |
2800 m_looping++; | |
2801 break; | |
2802 | |
2803 case do_kw: | |
2804 m_at_beginning_of_statement = true; | |
2805 m_looping++; | |
2806 break; | |
2807 | |
2808 case try_kw: | |
2809 case unwind_protect_kw: | |
2810 m_at_beginning_of_statement = true; | |
2811 break; | |
2812 | |
2813 case if_kw: | |
2814 case switch_kw: | |
2815 break; | |
2816 | |
2817 case get_kw: | |
2818 case set_kw: | |
2819 // 'get' and 'set' are keywords in classdef method | |
2820 // declarations. | |
2821 if (! m_maybe_classdef_get_set_method) | |
2822 { | |
2823 m_at_beginning_of_statement = previous_at_bos; | |
2824 return 0; | |
2825 } | |
2826 break; | |
2827 | |
2828 case enumeration_kw: | |
2829 case events_kw: | |
2830 case methods_kw: | |
2831 case properties_kw: | |
2832 // 'properties', 'methods' and 'events' are keywords for | |
2833 // 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
|
2834 if (! m_classdef_element_names_are_keywords) |
27770 | 2835 { |
2836 m_at_beginning_of_statement = previous_at_bos; | |
2837 return 0; | |
2838 } | |
2839 // fall through ... | |
2840 | |
2841 case classdef_kw: | |
2842 // 'classdef' is always a keyword. | |
2843 if (! m_force_script && m_token_count == 0 && input_from_file ()) | |
2844 { | |
2845 m_reading_classdef_file = true; | |
2846 m_reading_script_file = false; | |
2847 } | |
2848 break; | |
2849 | |
2850 case function_kw: | |
2851 m_defining_func++; | |
2852 m_parsed_function_name.push (false); | |
2853 | |
2854 if (! m_force_script && m_token_count == 0 && input_from_file ()) | |
2855 { | |
2856 m_reading_fcn_file = true; | |
2857 m_reading_script_file = false; | |
2858 } | |
2859 | |
2860 if (! (m_reading_fcn_file || m_reading_script_file | |
2861 || m_reading_classdef_file)) | |
2862 { | |
2863 // Input must be coming from the terminal or stdin? | |
2864 m_buffer_function_text = true; | |
2865 m_function_text += (m_current_input_line + "\n"); | |
2866 | |
2867 // FIXME: do we need to save and restore the file position | |
2868 // or just reset the line number here? The goal is to | |
2869 // track line info for command-line functions relative | |
2870 // 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
|
2871 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2872 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
|
2873 update_token_positions (slen); |
27770 | 2874 } |
2875 break; | |
2876 | |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2877 case arguments_kw: |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2878 #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
|
2879 return 0; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2880 #else |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2881 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
|
2882 return 0; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2883 break; |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2884 #endif |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29723
diff
changeset
|
2885 |
28517
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2886 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
|
2887 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
|
2888 break; |
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2889 |
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2890 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
|
2891 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
|
2892 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
|
2893 break; |
6e8a9845d118
Add 'spmd' as interpreter keyword for Matlab compatibility (bug #58676).
Rik <rik@octave.org>
parents:
28407
diff
changeset
|
2894 |
27770 | 2895 case magic_file_kw: |
2896 { | |
2897 if ((m_reading_fcn_file || m_reading_script_file | |
2898 || m_reading_classdef_file) | |
2899 && ! m_fcn_file_full_name.empty ()) | |
2900 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
|
2901 m_tok_beg, m_tok_end); |
27770 | 2902 else |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2903 tok_val = new token (magic_file_kw, "stdin", m_tok_beg, m_tok_end); |
27770 | 2904 } |
2905 break; | |
2906 | |
2907 case magic_line_kw: | |
2908 { | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2909 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
|
2910 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
|
2911 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
|
2912 m_tok_beg, m_tok_end); |
27770 | 2913 } |
2914 break; | |
2915 | |
2916 default: | |
2917 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
|
2918 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2919 |
27770 | 2920 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
|
2921 tok_val = new token (kw->tok, true, m_tok_beg, m_tok_end); |
27770 | 2922 |
2923 push_token (tok_val); | |
2924 | |
2925 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
|
2926 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2927 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2928 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2929 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
|
2930 { |
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
|
2931 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
|
2932 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
|
2933 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2934 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
|
2935 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2936 do |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2937 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2938 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
|
2939 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2940 if (p2 != std::string::npos) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2941 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2942 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
|
2943 p1 = p2 + 1; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2944 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2945 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2946 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
|
2947 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
2948 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
|
2949 return true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2950 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2951 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
|
2952 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2953 return false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2954 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2955 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2956 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2957 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
|
2958 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2959 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
|
2960 || (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
|
2961 && ! 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
|
2962 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2963 |
3220 | 2964 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
|
2965 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
|
2966 { |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2967 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
|
2968 } |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2969 |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2970 static inline bool |
3220 | 2971 looks_like_hex (const char *s, int len) |
2972 { | |
2973 return (len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')); | |
2974 } | |
2975 | |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2976 static inline octave_value |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2977 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
|
2978 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2979 if (unsigned_val) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2980 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2981 switch (bytes) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2982 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2983 case 1: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2984 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
|
2985 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2986 case 2: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2987 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
|
2988 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2989 case 4: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2990 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
|
2991 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2992 case 8: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2993 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
|
2994 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2995 default: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2996 panic_impossible (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2997 }; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2998 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
2999 else |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3000 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3001 // 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
|
3002 // 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
|
3003 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3004 switch (bytes) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3005 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3006 case 1: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3007 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
|
3008 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3009 case 2: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3010 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
|
3011 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3012 case 4: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3013 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
|
3014 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3015 case 8: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3016 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
|
3017 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3018 default: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3019 panic_impossible (); |
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 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3022 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3023 return octave_value (); |
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 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3026 template <> |
28565
0ecec070c086
return token ID directly from base_lexer::handle_number
John W. Eaton <jwe@octave.org>
parents:
28522
diff
changeset
|
3027 int |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3028 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
|
3029 { |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3030 // Skip 0[bB] prefix. |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3031 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
|
3032 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3033 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
|
3034 yytxt.end ()); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3035 |
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
|
3036 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
|
3037 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3038 bool unsigned_val = true; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3039 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
|
3040 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3041 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
|
3042 { |
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
|
3043 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
|
3044 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3045 if (num_digits <= 8) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3046 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3047 else if (num_digits <= 16) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3048 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3049 else if (num_digits <= 32) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3050 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3051 else if (num_digits <= 64) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3052 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
|
3053 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3054 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3055 { |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3056 unsigned_val = (yytxt[pos] == 'u'); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3057 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
|
3058 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
|
3059 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
|
3060 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3061 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
|
3062 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3063 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
|
3064 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3065 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
|
3066 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3067 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
|
3068 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
|
3069 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3070 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3071 if (bytes < 0) |
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 token *tok |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3074 = new token (LEXICAL_ERROR, |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3075 "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
|
3076 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
|
3077 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3078 push_token (tok); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3079 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3080 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
|
3081 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3082 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3083 // 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
|
3084 // 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
|
3085 // of uintmax_t? |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3086 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3087 errno = 0; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3088 char *end; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3089 uintmax_t long_int_val; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3090 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
|
3091 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
|
3092 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
|
3093 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
|
3094 else |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3095 panic_impossible (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3096 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3097 if (errno == ERANGE) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3098 panic_impossible (); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3099 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3100 octave_value ov_value |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3101 = 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
|
3102 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3103 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
|
3104 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
|
3105 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3106 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
|
3107 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3108 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
|
3109 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3110 return count_token_internal (NUMBER); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3111 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3112 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3113 static uint64_t |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3114 flintmax (void) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3115 { |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3116 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
|
3117 } |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3118 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3119 template <> |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3120 int |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3121 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
|
3122 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3123 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
|
3124 bool digits_only = true; |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3125 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3126 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
|
3127 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
|
3128 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3129 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
|
3130 char *rp = yytxt; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3131 char *p = &tmptxt[0]; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3132 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3133 char ch; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3134 while ((ch = *rp++)) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3135 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3136 switch (ch) |
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 case '_': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3139 break; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3140 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3141 case 'D': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3142 case 'd': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3143 *p++ = 'e'; |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3144 digits_only = false; |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3145 break; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3146 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3147 case 'I': |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3148 case 'J': |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3149 case 'i': |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3150 case 'j': |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3151 // 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
|
3152 digits_only = false; |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3153 imag = true; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3154 break; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3155 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3156 case '+': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3157 case '-': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3158 case '.': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3159 case 'E': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3160 case 'e': |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3161 digits_only = false; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3162 *p++ = ch; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3163 break; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3164 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3165 default: |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3166 *p++ = ch; |
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 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3170 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3171 *p = '\0'; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3172 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3173 double value = 0.0; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3174 int nread = 0; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3175 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3176 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
|
3177 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3178 // 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
|
3179 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3180 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
|
3181 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3182 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
|
3183 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3184 // 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
|
3185 // flintmax + 2! |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3186 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3187 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
|
3188 { |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3189 // 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
|
3190 // 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
|
3191 // 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
|
3192 // 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
|
3193 // or uint64 functions. |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3194 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3195 errno = 0; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3196 char *end; |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3197 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
|
3198 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
|
3199 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
|
3200 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
|
3201 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
|
3202 else |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3203 panic_impossible (); |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3204 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3205 if (errno != ERANGE) |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3206 { |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3207 // 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
|
3208 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3209 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
|
3210 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
|
3211 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
|
3212 else |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3213 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
|
3214 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3215 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
|
3216 } |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3217 } |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3218 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3219 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
|
3220 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
|
3221 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3222 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
|
3223 |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3224 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
|
3225 ov_value = (imag |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28587
diff
changeset
|
3226 ? 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
|
3227 : 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
|
3228 |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3229 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
|
3230 |
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3231 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
|
3232 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3233 |
28583
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3234 template <> |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3235 int |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3236 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
|
3237 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3238 // Skip 0[xX] prefix. |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3239 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
|
3240 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3241 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
|
3242 yytxt.end ()); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3243 |
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
|
3244 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
|
3245 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3246 bool unsigned_val = true; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3247 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
|
3248 |
28587
6310bb807752
lex.ll: Correct indentation in cset 703458652e30.
Rik <rik@octave.org>
parents:
28586
diff
changeset
|
3249 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
|
3250 { |
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
|
3251 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
|
3252 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3253 if (num_digits <= 2) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3254 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3255 else if (num_digits <= 4) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3256 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3257 else if (num_digits <= 8) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3258 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3259 else if (num_digits <= 16) |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3260 bytes = 8; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3261 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3262 else |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3263 { |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3264 unsigned_val = (yytxt[pos] == 'u'); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3265 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
|
3266 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
|
3267 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
|
3268 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3269 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
|
3270 bytes = 1; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3271 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
|
3272 bytes = 2; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3273 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
|
3274 bytes = 4; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3275 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
|
3276 bytes = 8; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3277 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3278 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3279 if (bytes < 0) |
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 token *tok |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3282 = new token (LEXICAL_ERROR, |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3283 "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
|
3284 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
|
3285 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3286 push_token (tok); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3287 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3288 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
|
3289 } |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3290 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3291 // 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
|
3292 // are in deep doo doo. |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3293 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3294 uintmax_t long_int_val; |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3295 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
|
3296 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3297 octave_value ov_value |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3298 = 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
|
3299 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3300 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
|
3301 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
|
3302 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3303 update_token_positions (flex_yyleng ()); |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3304 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3305 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
|
3306 |
96e7dc4c2214
improve Matlab compatibility for binary and hexadecimal constants
John W. Eaton <jwe@octave.org>
parents:
28582
diff
changeset
|
3307 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
|
3308 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3309 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3310 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3311 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
|
3312 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3313 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
|
3314 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
|
3315 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3316 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
|
3317 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
|
3318 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
|
3319 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3320 offset = 3; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3321 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3322 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
|
3323 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
|
3324 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3325 char c = yytxt[offset]; |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
3326 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
|
3327 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3328 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
|
3329 offset++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3330 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3331 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3332 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3333 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3334 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3335 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
|
3336 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
|
3337 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3338 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
|
3339 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
|
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 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
|
3342 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
|
3343 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3344 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
|
3345 offset++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3346 } |
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 break; |
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 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3351 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
|
3352 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3353 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
|
3354 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3355 // 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
|
3356 // 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
|
3357 // 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
|
3358 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3359 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
|
3360 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3361 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
|
3362 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3363 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
|
3364 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3365 |
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
|
3366 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
|
3367 } |
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 void |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3370 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
|
3371 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3372 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
|
3373 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3374 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
|
3375 && ! 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
|
3376 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
|
3377 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3378 if (copyright) |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3379 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
|
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_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
|
3382 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3383 m_comment_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3384 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3385 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
|
3386 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3387 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3388 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3389 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
|
3390 { |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3391 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
|
3392 |
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3393 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
|
3394 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
|
3395 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3396 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
|
3397 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3398 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
|
3399 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3400 if (bracket_type == ']') |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3401 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
|
3402 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
|
3403 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
|
3404 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3405 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
|
3406 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3407 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3408 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
|
3409 |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3410 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
|
3411 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3412 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3413 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3414 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
|
3415 { |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
3416 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
|
3417 return false; |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
3418 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3419 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
|
3420 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
|
3421 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3422 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
|
3423 && 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
|
3424 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3425 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3426 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3427 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
|
3428 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3429 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3430 |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3431 std::string txt = flex_yytext (); |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3432 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3433 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
|
3434 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3435 |
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
|
3436 std::size_t pos = txt.find ("@"); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3437 |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26710
diff
changeset
|
3438 std::string meth = txt.substr (0, pos); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3439 std::string cls = txt.substr (pos + 1); |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3440 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
3441 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
|
3442 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3443 token *tok |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3444 = 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
|
3445 "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
|
3446 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
|
3447 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3448 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
|
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 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
|
3451 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3452 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3453 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
|
3454 |
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
|
3455 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
|
3456 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3457 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
|
3458 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3459 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3460 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3461 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
|
3462 { |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3463 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
|
3464 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3465 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
|
3466 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3467 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3468 // Eliminate leading '?' |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3469 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
|
3470 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3471 // 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
|
3472 // 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
|
3473 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3474 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
|
3475 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3476 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
|
3477 "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
|
3478 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
|
3479 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
|
3480 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3481 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
|
3482 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3483 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3484 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
|
3485 |
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
|
3486 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
|
3487 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3488 return METAQUERY; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3489 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3490 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3491 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3492 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
|
3493 { |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3494 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
|
3495 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3496 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
|
3497 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
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 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3502 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
|
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 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3505 = 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
|
3506 "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
|
3507 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
|
3508 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3509 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
|
3510 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3511 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
|
3512 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3513 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3514 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
|
3515 |
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
|
3516 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
|
3517 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3518 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
|
3519 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3520 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3521 // 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
|
3522 // 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
|
3523 // 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
|
3524 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3525 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3526 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
|
3527 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3528 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3529 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3530 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
|
3531 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3532 // 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
|
3533 // 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
|
3534 // 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
|
3535 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3536 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
|
3537 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3538 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
|
3539 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3540 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
|
3541 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3542 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
|
3543 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3544 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
3545 // 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
|
3546 // 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
|
3547 // 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
|
3548 |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
3549 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
|
3550 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3551 // 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
|
3552 // 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
|
3553 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3554 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
|
3555 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3556 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
|
3557 |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
3558 // 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
|
3559 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3560 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
|
3561 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3562 |
29723
6858992dfadf
enter symbols into current scope in parser instead of lexer
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
3563 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
|
3564 |
29900
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
3565 // For compatibility with Matlab, the following symbols are |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
3566 // handled specially so that things like |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3567 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3568 // pi +1 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3569 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3570 // are parsed as an addition expression instead of as a command-style |
29900
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
3571 // function call with the argument "+1". Also for compatibility with |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
3572 // Matlab, if we are at the top level workspace, do not consider IDENT |
da6e5914ddaf
handle all binary operators the same when detecting command syntax (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29864
diff
changeset
|
3573 // as a possible command if it is already known to be a variable. |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3574 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3575 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
|
3576 && ! (m_parsing_anon_fcn_body |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3577 || ident == "e" || ident == "pi" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3578 || ident == "I" || ident == "i" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3579 || ident == "J" || ident == "j" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3580 || ident == "Inf" || ident == "inf" |
29903
ef865fcd4611
don't check status of symbol as variable when parsing at top level (bug #60882)
John W. Eaton <jwe@octave.org>
parents:
29900
diff
changeset
|
3581 || 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
|
3582 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
|
3583 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3584 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
|
3585 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3586 // 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
|
3587 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3588 if (ident != "end") |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3589 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
|
3590 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3591 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
|
3592 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3593 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
|
3594 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3595 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3596 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3597 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
|
3598 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3599 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
|
3600 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3601 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
|
3602 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
|
3603 "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
|
3604 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
|
3605 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3606 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
|
3607 "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
|
3608 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
|
3609 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3610 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3611 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3612 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
|
3613 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3614 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
|
3615 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3616 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
|
3617 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
|
3618 "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
|
3619 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
|
3620 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3621 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
|
3622 "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
|
3623 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
|
3624 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3625 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3626 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3627 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
|
3628 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3629 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
|
3630 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3631 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
|
3632 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
|
3633 "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
|
3634 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
|
3635 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3636 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
|
3637 "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
|
3638 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
|
3639 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3640 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3641 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3642 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
|
3643 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3644 if (c == '#') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3645 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
|
3646 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3647 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3648 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3649 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
|
3650 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3651 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
|
3652 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3653 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3654 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3655 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
|
3656 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3657 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
|
3658 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
|
3659 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
|
3660 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
|
3661 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
|
3662 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3663 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3664 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3665 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
|
3666 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3667 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
|
3668 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
|
3669 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
|
3670 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3671 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3672 token * |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3673 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
|
3674 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3675 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
|
3676 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
|
3677 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3678 |
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
|
3679 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
|
3680 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
|
3681 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3682 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
|
3683 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3684 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3685 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3686 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
|
3687 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3688 switch (tok) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3689 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3690 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
|
3691 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
|
3692 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
|
3693 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
|
3694 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
|
3695 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
|
3696 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
|
3697 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
|
3698 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
|
3699 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
|
3700 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
|
3701 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
|
3702 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
|
3703 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
|
3704 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
|
3705 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
|
3706 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
|
3707 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
|
3708 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
|
3709 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
|
3710 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
|
3711 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
|
3712 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
|
3713 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
|
3714 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
|
3715 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
|
3716 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
|
3717 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
|
3718 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
|
3719 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
|
3720 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
|
3721 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
|
3722 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
|
3723 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
|
3724 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
|
3725 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
|
3726 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
|
3727 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
|
3728 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
|
3729 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
|
3730 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
|
3731 |
28582
dc8de424fc72
use octave_value object to store numeric tokens in the lexer
John W. Eaton <jwe@octave.org>
parents:
28565
diff
changeset
|
3732 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
|
3733 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3734 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
|
3735 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
|
3736 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
|
3737 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
|
3738 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
|
3739 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3740 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3741 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3742 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
|
3743 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3744 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
|
3745 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
|
3746 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3747 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3748 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3749 case NAME: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3750 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3751 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
|
3752 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
|
3753 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3754 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3755 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3756 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
|
3757 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3758 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
|
3759 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
|
3760 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3761 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
|
3762 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3763 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
|
3764 << " [" << 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
|
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 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
|
3769 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
|
3770 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
|
3771 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
|
3772 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
|
3773 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
|
3774 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
|
3775 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
|
3776 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
|
3777 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
|
3778 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
|
3779 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
|
3780 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
|
3781 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
|
3782 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
|
3783 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
|
3784 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
|
3785 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
|
3786 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
|
3787 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
|
3788 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
|
3789 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
|
3790 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
|
3791 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
|
3792 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
|
3793 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
|
3794 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
|
3795 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
|
3796 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
|
3797 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
|
3798 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
|
3799 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
|
3800 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
|
3801 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
|
3802 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
|
3803 default: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3804 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3805 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
|
3806 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
|
3807 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3808 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
|
3809 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3810 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3811 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3812 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3813 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3814 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3815 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
|
3816 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3817 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
|
3818 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3819 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3820 bool |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3821 base_lexer::debug_flag (void) const |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3822 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3823 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3824 return stgs.lexer_debug_flag (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3825 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3826 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3827 bool |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3828 base_lexer::display_tokens (void) const |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3829 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3830 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3831 return stgs.display_tokens (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3832 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3833 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3834 void |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3835 base_lexer::increment_token_count (void) |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3836 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3837 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3838 stgs.increment_token_count (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3839 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3840 m_token_count++; |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3841 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3842 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3843 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3844 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
|
3845 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3846 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
|
3847 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3848 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
|
3849 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3850 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
|
3851 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3852 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
|
3853 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
|
3854 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3855 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3856 |
25994
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3857 bool |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3858 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
|
3859 { |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3860 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
|
3861 |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3862 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
|
3863 } |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3864 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3865 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3866 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
|
3867 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3868 OCTAVE_YYG; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3869 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3870 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
|
3871 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3872 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
|
3873 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3874 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3875 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3876 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
|
3877 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3878 OCTAVE_YYG; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3879 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3880 start_state_stack.pop (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3881 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3882 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
|
3883 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3884 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3885 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3886 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
|
3887 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3888 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
|
3889 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
|
3890 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3891 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
|
3892 } |
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 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3895 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
|
3896 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3897 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
|
3898 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3899 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
|
3900 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3901 case INITIAL: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3902 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
|
3903 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3904 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3905 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
|
3906 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
|
3907 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3908 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3909 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
|
3910 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
|
3911 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3912 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3913 case INPUT_FILE_START: |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3914 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
|
3915 break; |
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 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
|
3918 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
|
3919 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3920 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3921 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
|
3922 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
|
3923 break; |
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 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
|
3926 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
|
3927 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3928 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3929 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
|
3930 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
|
3931 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3932 |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3933 case FQ_IDENT_START: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3934 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
|
3935 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3936 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3937 default: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3938 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
|
3939 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3940 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3941 } |
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 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3944 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
|
3945 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3946 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
|
3947 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3948 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
|
3949 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3950 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
|
3951 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3952 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
|
3953 xunput (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3954 |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
3955 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
|
3956 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3957 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
|
3958 || 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
|
3959 || ((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
|
3960 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
|
3961 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3962 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3963 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
|
3964 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3965 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3966 int |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3967 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
|
3968 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3969 if (! compat) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3970 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
|
3971 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3972 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3973 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3974 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
|
3975 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3976 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
|
3977 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
|
3978 |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3979 switch (tok) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3980 { |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3981 case EXPR_LT: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3982 if (m_parsing_classdef_decl) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3983 { |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3984 m_parsing_classdef_superclass = true; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3985 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
|
3986 } |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3987 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3988 |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3989 case EXPR_AND: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3990 if (m_parsing_classdef_superclass) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3991 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
|
3992 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3993 |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3994 default: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3995 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3996 } |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3997 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3998 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
|
3999 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4000 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4001 // 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
|
4002 // 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
|
4003 // function call. |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4004 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4005 int |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4006 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
|
4007 { |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4008 int tok = SQ_STRING; |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4009 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
4010 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
|
4011 |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4012 m_string_text = ""; |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
4013 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
|
4014 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4015 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
|
4016 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4017 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4018 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4019 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
|
4020 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4021 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
|
4022 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
|
4023 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4024 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
|
4025 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4026 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
|
4027 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4028 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4029 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4030 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
|
4031 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
4032 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
|
4033 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4034 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
|
4035 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4036 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
|
4037 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4038 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4039 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4040 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
|
4041 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4042 if (tok != '\n') |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4043 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
|
4044 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4045 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
|
4046 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4047 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4048 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4049 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
|
4050 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4051 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4052 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
|
4053 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
|
4054 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
4055 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
|
4056 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4057 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
|
4058 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
|
4059 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
|
4060 } |
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 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 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
|
4067 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4068 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
|
4069 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4070 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
|
4071 { |
27527
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4072 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
|
4073 |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4074 std::string ps |
27528
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
4075 = 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
|
4076 |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4077 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
|
4078 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4079 bool eof = false; |
27527
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
4080 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
|
4081 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4082 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
|
4083 |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4084 // 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
|
4085 // command line. |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4086 // |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4087 // 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
|
4088 // |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4089 // 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
|
4090 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4091 if (m_buffer_function_text) |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4092 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4093 if (! m_current_input_line.empty ()) |
23786
10136bfd46a3
lex.ll: Fix heap-buffer-overflow (bug #51533).
Rik <rik@octave.org>
parents:
23750
diff
changeset
|
4094 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4095 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
|
4096 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
|
4097 m_function_text += '\n'; |
23786
10136bfd46a3
lex.ll: Fix heap-buffer-overflow (bug #51533).
Rik <rik@octave.org>
parents:
23750
diff
changeset
|
4098 } |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4099 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4100 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4101 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4102 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
|
4103 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
|
4104 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4105 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
|
4106 |
27528
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
4107 m_initial_input = false; |
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
4108 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4109 return status; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4110 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4111 |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4112 void |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4113 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
|
4114 { |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4115 // 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
|
4116 // 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
|
4117 // |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
4118 // 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
|
4119 // 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
|
4120 // 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
|
4121 // 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
|
4122 // 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
|
4123 // 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
|
4124 // 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
|
4125 // 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
|
4126 // |
549273db93e4
cache current input line in push lexer
John W. Eaton <jwe@octave.org>
parents:
27443
diff
changeset
|
4127 // 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
|
4128 // 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
|
4129 // 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
|
4130 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4131 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
|
4132 m_current_input_line = input; |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4133 } |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
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 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4136 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
|
4137 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4138 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
|
4139 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
4140 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
|
4141 { |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4142 // 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
|
4143 // 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
|
4144 // 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
|
4145 // 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
|
4146 // 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
|
4147 // 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
|
4148 |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4149 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
|
4150 |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4151 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
|
4152 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
|
4153 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4154 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
|
4155 { |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4156 // 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
|
4157 // 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
|
4158 |
1db62b2d6c39
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
4159 if (! m_input_buf.empty ()) |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
4160 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
|
4161 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
|
4162 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
|
4163 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4164 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4165 return status; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
4166 } |
29960
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
4167 |
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
4168 OCTAVE_NAMESPACE_END |