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