Mercurial > octave
annotate libinterp/parse-tree/lex.ll @ 29654:d13d090cb03a stable
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
Files affected: make_int.cc, file-editor-tab.cc, octave-qscintilla.cc,
Cell.cc, Cell.h, call-stack.cc, call-stack.h, cellfun.cc, data.cc,
debug.cc, dlmread.cc, error.cc, event-queue.h, fcn-info.cc,
fcn-info.h, file-io.cc, ft-text-renderer.cc, gl2ps-print.cc,
graphics.cc, graphics.in.h, help.cc, hex2num.cc, input.cc,
latex-text-renderer.cc, load-path.cc, load-save.cc, load-save.h,
ls-hdf5.cc, ls-mat-ascii.cc, ls-mat5.cc, ls-oct-text.cc, mex.cc,
mexproto.h, mxarray.h, oct-map.cc, oct-stream.cc, oct-stream.h,
pager.cc, pager.h, pr-output.cc, regexp.cc, settings.h,
stack-frame.cc, stack-frame.h, strfns.cc, syminfo.cc, symrec.h,
symscope.cc, symscope.h, symtab.cc, sysdep.cc, toplev.cc, utils.cc,
utils.h, variables.cc, __fltk_uigetfile__.cc, __init_fltk__.cc,
audioread.cc, gzip.cc, cdef-class.cc, cdef-manager.cc, cdef-method.cc,
cdef-object.cc, cdef-object.h, ov-base-diag.cc, ov-base-diag.h,
ov-base-mat.cc, ov-base-mat.h, ov-base-scalar.cc, ov-base-scalar.h,
ov-base-sparse.h, ov-base.cc, ov-base.h, ov-cell.cc, ov-cell.h,
ov-ch-mat.cc, ov-class.cc, ov-class.h, ov-classdef.cc,
ov-fcn-handle.cc, ov-java.cc, ov-lazy-idx.h, ov-perm.cc, ov-perm.h,
ov-range.h, ov-str-mat.cc, ov-struct.cc, ov-struct.h, ov-usr-fcn.cc,
ov-usr-fcn.h, ov.cc, ov.h, ovl.cc, octave.cc, bp-table.cc, jit-ir.cc,
jit-ir.h, jit-typeinfo.cc, jit-typeinfo.h, jit-util.h, lex.h, lex.ll,
oct-lvalue.cc, oct-parse.yy, parse.h, profiler.h, pt-eval.cc,
pt-eval.h, pt-jit.cc, pt-jit.h, pt-pr-code.cc, pt-tm-const.cc,
pt-tm-const.h, Array.h, CMatrix.cc, DiagArray2.h, PermMatrix.h,
Sparse.h, dMatrix.cc, fCMatrix.cc, fMatrix.cc, bsxfun-defs.cc,
oct-fftw.cc, oct-fftw.h, randpoisson.cc, sparse-chol.cc,
mx-inlines.cc, file-ops.cc, lo-sysdep.cc, oct-env.cc, oct-time.cc,
action-container.cc, action-container.h, base-list.h, caseless-str.h,
cmd-edit.cc, cmd-hist.cc, data-conv.cc, data-conv.h, f77-fcn.h,
file-info.cc, file-info.h, kpse.cc, kpse.h, lo-cutils.h, lo-hash.h,
lo-regexp.cc, oct-base64.cc, oct-base64.h, oct-binmap.h, oct-glob.cc,
oct-shlib.cc, oct-shlib.h, oct-sort.cc, oct-sparse.h, oct-string.cc,
quit.cc, unwind-prot.h, url-transfer.cc, main.in.cc, mkoctfile.in.cc,
and shared-fcns.h.
(grafted from aef11bb4e6d1f303ad9de5688fcb7244ef48867e)
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 28 Apr 2021 22:57:42 -0400 |
parents | 0a5b15007766 |
children | 32f4357ac8d9 7f5bd197fea6 |
rev | line source |
---|---|
1994 | 1 /* |
1 | 2 |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 We are using the pure parser interface and the reentrant lexer interface |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 but the Octave parser and lexer are NOT properly reentrant because both |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 still use many global variables. It should be safe to create a parser |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 object and call it while another parser object is active (to parse a |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 callback function while the main interactive parser is waiting for |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 input, for example) if you take care to properly save and restore |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 (typically with an unwind_protect object) relevant global values before |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 and after the nested call. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 |
16150
891a2a4df71f
* lex.ll: Use C-style comments in preamble.
John W. Eaton <jwe@octave.org>
parents:
16149
diff
changeset
|
12 */ |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
13 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
14 %top { |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
28773
diff
changeset
|
17 // Copyright (C) 1993-2021 The Octave Project Developers |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
25 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
26 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
27 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
28 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
29 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
30 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
31 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
32 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
33 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
34 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
35 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
36 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
37 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
38 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
39 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
40 #if defined (HAVE_CONFIG_H) |
22003
2d3972b802ff
use consistent style for including config.h in source files
John W. Eaton <jwe@octave.org>
parents:
21987
diff
changeset
|
41 # include "config.h" |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
42 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
43 |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
44 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
45 // This one needs to be global. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
46 # pragma GCC diagnostic ignored "-Wunused-function" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
47 // Disable these warnings for code that is generated by flex, |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
48 // including pattern rules. Push the current state so we can |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
49 // restore the warning state prior to functions we define at |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
50 // the bottom of the file. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
51 # pragma GCC diagnostic push |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
52 # pragma GCC diagnostic ignored "-Wold-style-cast" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
53 # pragma GCC diagnostic ignored "-Wsign-compare" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
54 # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" |
24445
fe54e9633815
lex.ll: Fix macro for implicit fallthrough warning.
John W. Eaton <jwe@octave.org>
parents:
24444
diff
changeset
|
55 # if defined (HAVE_WARN_IMPLICIT_FALLTHROUGH) |
24444
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
56 # pragma GCC diagnostic ignored "-Wimplicit-fallthrough" |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
57 # endif |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
58 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
59 |
21332
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
60 // Define away the deprecated register storage class specifier to avoid |
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
61 // potential warnings about it. |
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
62 #if ! defined (register) |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
63 # define register |
21332
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
64 #endif |
db574711df78
eliminate deprecated register storage class specifier
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
65 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
66 } |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
67 |
4753 | 68 %option prefix = "octave_" |
16146 | 69 %option noyywrap |
16149
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
70 %option reentrant |
49dfba4fd3c5
use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents:
16148
diff
changeset
|
71 %option bison-bridge |
4753 | 72 |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
73 %option noyyalloc |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
74 %option noyyrealloc |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
75 %option noyyfree |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
76 |
18234 | 77 %x COMMAND_START |
4208 | 78 %s MATRIX_START |
4240 | 79 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
80 %x INPUT_FILE_START |
1 | 81 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
82 %x BLOCK_COMMENT_START |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
83 %x LINE_COMMENT_START |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
84 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
85 %x DQ_STRING_START |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
86 %x SQ_STRING_START |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
87 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
88 %x FQ_IDENT_START |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
89 |
1 | 90 %{ |
240 | 91 |
1341 | 92 #include <cctype> |
93 #include <cstring> | |
94 | |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
95 #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
|
96 #include <set> |
5765 | 97 #include <sstream> |
1823 | 98 #include <string> |
4214 | 99 #include <stack> |
1823 | 100 |
2926 | 101 #include "cmd-edit.h" |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
102 #include "lo-mappers.h" |
4153 | 103 #include "quit.h" |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
104 #include "unistd-wrappers.h" |
2926 | 105 |
16154
aa5e1e8dce66
* lex.ll: Change y.tab.h to oct-parse.h in comment.
John W. Eaton <jwe@octave.org>
parents:
16150
diff
changeset
|
106 // 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
|
107 // 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
|
108 // class declarations. We can't include oct-parse.h in oct-gperf.h |
1497 | 109 // because it may not be protected to allow it to be included multiple |
110 // times. | |
111 | |
4264 | 112 #include "Cell.h" |
2181 | 113 #include "defun.h" |
1355 | 114 #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
|
115 #include "errwarn.h" |
1351 | 116 #include "input.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
22089
diff
changeset
|
117 #include "interpreter.h" |
1355 | 118 #include "lex.h" |
22089
c2c668b3051b
use classes for octave application and interpreter
John W. Eaton <jwe@octave.org>
parents:
22003
diff
changeset
|
119 #include "octave.h" |
2891 | 120 #include "ov.h" |
1355 | 121 #include "parse.h" |
2987 | 122 #include "pt-all.h" |
2891 | 123 #include "symtab.h" |
124 #include "token.h" | |
1355 | 125 #include "utils.h" |
126 #include "variables.h" | |
23479
06bf3a0b08bf
maint: Use "" instead of <> for our own include files.
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
127 #include "oct-parse.h" |
06bf3a0b08bf
maint: Use "" instead of <> for our own include files.
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
128 #include "oct-gperf.h" |
1 | 129 |
18974
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
130 // 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
|
131 // 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
|
132 // 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
|
133 // 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
|
134 // 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
|
135 // in the generated oct-parse.h file. |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
136 |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
137 #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
|
138 # define YYSTYPE OCTAVE_STYPE |
18974
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
139 #endif |
d8abf813c69f
handle changes in bison 3.x
John W. Eaton <jwe@octave.org>
parents:
18774
diff
changeset
|
140 |
21910
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
141 #define YY_NO_UNISTD_H 1 |
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
142 #define isatty octave_isatty_wrapper |
4d723ba06b4a
provide wrappers for some unistd.h functions
John W. Eaton <jwe@octave.org>
parents:
21814
diff
changeset
|
143 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
144 #if ! (defined (FLEX_SCANNER) \ |
2716 | 145 && defined (YY_FLEX_MAJOR_VERSION) && YY_FLEX_MAJOR_VERSION >= 2 \ |
146 && defined (YY_FLEX_MINOR_VERSION) && YY_FLEX_MINOR_VERSION >= 5) | |
147 #error lex.l requires flex version 2.5.4 or later | |
148 #endif | |
149 | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
150 #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
|
151 #define curr_lexer yyextra |
4753 | 152 |
153 // Arrange to get input via readline. | |
154 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
155 #if defined (YY_INPUT) |
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
156 # undef YY_INPUT |
4753 | 157 #endif |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
158 #define YY_INPUT(buf, result, max_size) \ |
16293
57e87ddfee14
create base class for lexer
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
159 result = curr_lexer->fill_flex_buffer (buf, max_size) |
4753 | 160 |
161 // Try to avoid crashing out completely on fatal scanner errors. | |
162 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
163 #if defined (YY_FATAL_ERROR) |
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21722
diff
changeset
|
164 # undef YY_FATAL_ERROR |
4753 | 165 #endif |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
166 #define YY_FATAL_ERROR(msg) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
167 (yyget_extra (yyscanner))->fatal_error (msg) |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
168 |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
169 #define CMD_OR_OP(PATTERN, TOK, COMPAT) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
170 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
171 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
172 curr_lexer->lexer_debug (PATTERN); \ |
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 if (curr_lexer->looks_like_command_arg ()) \ |
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 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
177 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
178 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
179 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
180 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
|
181 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
182 while (0) |
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 #define CMD_OR_COMPUTED_ASSIGN_OP(PATTERN, TOK) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
185 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
186 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
187 curr_lexer->lexer_debug (PATTERN); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
188 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
189 if (curr_lexer->previous_token_may_be_command () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
190 && curr_lexer->space_follows_previous_token ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
191 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
192 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
193 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
194 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
195 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
196 return curr_lexer->handle_op (TOK, false, false); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
197 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
198 while (0) |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
199 |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
200 #define CMD_OR_UNARY_OP(PATTERN, TOK, COMPAT) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
201 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
202 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
203 curr_lexer->lexer_debug (PATTERN); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
204 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
205 if (curr_lexer->previous_token_may_be_command ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
206 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
207 if (curr_lexer->looks_like_command_arg ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
208 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
209 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
210 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
211 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
212 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
213 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
|
214 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
215 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
216 { \ |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
217 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
|
218 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
219 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
220 curr_lexer->xunput (','); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
221 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
222 else \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
223 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
|
224 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
225 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
226 while (0) |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
227 |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
228 #define HANDLE_EOB_OR_EOF(STATUS) \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
229 do \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
230 { \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
231 if (curr_lexer->is_push_lexer ()) \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
232 { \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
233 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:
28113
diff
changeset
|
234 return STATUS; \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
235 \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
236 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:
28113
diff
changeset
|
237 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:
28113
diff
changeset
|
238 } \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
239 } \ |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
240 while (0) |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
241 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
242 // 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:
28113
diff
changeset
|
243 // 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:
28113
diff
changeset
|
244 // 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
|
245 #define HANDLE_STRING_CONTINUATION \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
246 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
247 { \ |
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
|
248 curr_lexer->m_filepos.next_line (); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
249 \ |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
250 HANDLE_EOB_OR_EOF (-1); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
251 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
252 while (0) |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
253 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
254 #define HANDLE_IDENTIFIER(pattern, get_set) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
255 do \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
256 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
257 curr_lexer->lexer_debug (pattern); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
258 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
259 int tok = curr_lexer->previous_token_value (); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
260 \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
261 if (curr_lexer->whitespace_is_significant () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
262 && curr_lexer->space_follows_previous_token () \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
263 && ! (tok == '[' || tok == '{' \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
264 || curr_lexer->previous_token_is_binop ())) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
265 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
266 yyless (0); \ |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
267 curr_lexer->xunput (','); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
268 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
269 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
270 { \ |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
271 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
|
272 && curr_lexer->previous_token_may_be_command ()) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
273 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
274 yyless (0); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
275 curr_lexer->push_start_state (COMMAND_START); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
276 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
277 else \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
278 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
279 if (get_set) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
280 { \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
281 yyless (3); \ |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
282 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
|
283 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
|
284 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
285 \ |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
286 return curr_lexer->handle_identifier (); \ |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
287 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
288 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
289 } \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
290 while (0) |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
291 |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
292 static inline bool |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
293 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
|
294 { |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
295 return c == ' ' || c == '\t'; |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
296 } |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
297 |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
298 static inline bool |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
299 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
|
300 { |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
301 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
|
302 } |
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
303 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
304 namespace octave |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
305 { |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
306 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
|
307 { |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
308 // 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
|
309 // 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
|
310 // "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
|
311 // 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
|
312 // in the language, so omit them from the list of possible |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
313 // keywords. Likewise for "enumeration", "events", "methods", and |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
314 // "properties". |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
315 |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
316 return (octave_kw_hash::in_word_set (s.c_str (), s.length ()) != nullptr |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
317 && ! (s == "set" || s == "get" |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
318 || 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
|
319 || 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
|
320 } |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
321 } |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
322 |
1 | 323 %} |
324 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
325 D [0-9] |
20588
e34692daf663
Extend parser to accept '_' in numbers.
Rik <rik@octave.org>
parents:
20547
diff
changeset
|
326 D_ [0-9_] |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
327 S [ \t] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
328 NL ((\n)|(\r)|(\r\n)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
329 Im [iIjJ] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
330 CCHAR [#%] |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
331 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
|
332 FQIDENT ({IDENT}({S}*\.{S}*{IDENT})*) |
20588
e34692daf663
Extend parser to accept '_' in numbers.
Rik <rik@octave.org>
parents:
20547
diff
changeset
|
333 EXPON ([DdEe][+-]?{D}{D_}*) |
20589
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
334 NUMBIN (0[bB][01_]+) |
20588
e34692daf663
Extend parser to accept '_' in numbers.
Rik <rik@octave.org>
parents:
20547
diff
changeset
|
335 NUMHEX (0[xX][0-9a-fA-F][0-9a-fA-F_]*) |
20589
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
336 NUMREAL (({D}{D_}*\.?{D_}*{EXPON}?)|(\.{D}{D_}*{EXPON}?)) |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
337 NUMBER ({NUMREAL}|{NUMHEX}|{NUMBIN}) |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
338 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
339 ANY_EXCEPT_NL [^\r\n] |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
340 ANY_INCLUDING_NL (.|{NL}) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
341 |
1 | 342 %% |
343 | |
9474
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
344 %{ |
20835
14cd86258b3d
use 'invalid' instead of 'bogus' in source files
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
345 // 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
|
346 // the parser go down a special path. |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
347 %} |
25ed2d6aacf6
Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents:
9324
diff
changeset
|
348 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
349 <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
|
350 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
|
351 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
352 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
|
353 |
127cccb037bf
move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents:
16199
diff
changeset
|
354 // 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
|
355 // 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
|
356 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
|
357 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
358 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
359 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
360 return curr_lexer->show_token (INPUT_FILE); |
4238 | 361 } |
362 | |
18774
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
363 <INPUT_FILE_START><<EOF>> { |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
364 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
|
365 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
366 // 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
|
367 // 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
|
368 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
|
369 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
370 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
|
371 |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
372 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
|
373 } |
4293f49795d9
don't crash on empty script files (bug #42064)
John W. Eaton <jwe@octave.org>
parents:
18531
diff
changeset
|
374 |
968 | 375 %{ |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
376 // Help and other command-style functions. |
968 | 377 %} |
378 | |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
379 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
380 // 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
|
381 // 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
|
382 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
383 |
18312
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
384 <COMMAND_START>(\.\.\.){ANY_EXCEPT_NL}*{NL} { |
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
385 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
|
386 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
387 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
|
388 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
389 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
|
390 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
|
391 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
392 } |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
393 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
394 HANDLE_STRING_CONTINUATION; |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
395 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
396 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
397 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
398 // 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
|
399 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
400 |
18312
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
401 <COMMAND_START>({CCHAR}{ANY_EXCEPT_NL}*)?{NL} { |
7ac2a8b758fc
maint: Periodic merge of stable to gui-release.
John W. Eaton <jwe@octave.org>
diff
changeset
|
402 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
|
403 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
404 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
|
405 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
406 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
|
407 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
|
408 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
409 } |
8535 | 410 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
411 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
|
412 |
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
|
413 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
|
414 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
|
415 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
|
416 curr_lexer->pop_start_state (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
417 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
418 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
|
419 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
420 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
421 <COMMAND_START>[\,\;] { |
18234 | 422 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
|
423 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
424 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
|
425 { |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
426 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
|
427 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
428 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
|
429 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
|
430 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
431 } |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
432 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
433 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
|
434 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
435 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
|
436 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
|
437 curr_lexer->pop_start_state (); |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
438 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
439 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
|
440 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
441 else |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
442 { |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
443 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
|
444 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
|
445 } |
967 | 446 } |
1 | 447 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
448 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
449 // 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
|
450 // 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
|
451 // 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
|
452 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
453 |
18234 | 454 <COMMAND_START>[\(\[\{]* { |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
455 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
|
456 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
457 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
|
458 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
|
459 curr_lexer->m_filepos.increment_column (yyleng); |
967 | 460 } |
1 | 461 |
18234 | 462 <COMMAND_START>[\)\]\}]* { |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
463 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
|
464 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
465 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
|
466 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
|
467 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
|
468 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
469 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
470 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
471 // 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
|
472 // 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
|
473 // text. For instance, |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
474 // |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
475 // command 'text1'"text2" |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
476 // |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
477 // 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
|
478 // 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
|
479 // 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
|
480 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
481 |
4208 | 482 <COMMAND_START>[\"\'] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
483 curr_lexer->lexer_debug ("<COMMAND_START>[\\\"\\']"); |
8535 | 484 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
485 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
|
486 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
|
487 ? 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
|
488 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
489 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
|
490 |
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
|
491 curr_lexer->m_filepos.increment_column (yyleng); |
975 | 492 } |
493 | |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
494 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
495 // 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
|
496 // 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
|
497 // incorporated into the argument. |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
498 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
499 |
18234 | 500 <COMMAND_START>{S}* { |
501 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
|
502 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
503 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
|
504 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
505 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
|
506 { |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
507 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
|
508 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
|
509 return curr_lexer->finish_command_arg (); |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
510 } |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
511 } |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
512 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
513 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
|
514 |
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
|
515 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
|
516 } |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
517 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
518 %{ |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
519 // 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
|
520 %} |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
521 |
18234 | 522 <COMMAND_START>([\.]|[^#% \t\r\n\.\,\;\"\'\(\[\{\}\]\)]*) { |
18458
ebb878596bcf
Restore escaped backslashes accidentally deleted by cset af8a70d6885c
Mike Miller <mtmiller@ieee.org>
parents:
18437
diff
changeset
|
523 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
|
524 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
525 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
|
526 curr_lexer->m_filepos.increment_column (yyleng); |
967 | 527 } |
1 | 528 |
28772
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
529 %{ |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
530 // 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
|
531 %} |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
532 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
533 <MATRIX_START>{S}* { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
534 curr_lexer->lexer_debug ("<MATRIX_START>{S}*"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
535 |
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
|
536 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
|
537 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
538 curr_lexer->mark_previous_token_trailing_space (); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
539 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
540 |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
541 <MATRIX_START>{NL} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
542 curr_lexer->lexer_debug ("<MATRIX_START>{NL}"); |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
543 |
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
|
544 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
|
545 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
546 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
|
547 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
|
548 else |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
549 { |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
550 int tok = curr_lexer->previous_token_value (); |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
551 |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
552 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
|
553 curr_lexer->xunput (';'); |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
554 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
555 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
556 |
968 | 557 %{ |
28772
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
558 // 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
|
559 // 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
|
560 %} |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
561 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
562 <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
|
563 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
|
564 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
565 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
|
566 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
567 // 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
|
568 // 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
|
569 // 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
|
570 // 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
|
571 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
572 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
|
573 } |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
574 |
20b4bd415083
avoid parse error with continuation in matrix list (bug #59150)
John W. Eaton <jwe@octave.org>
parents:
28679
diff
changeset
|
575 %{ |
1 | 576 // 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
|
577 // need to know if the next token is '=' or '=='. |
1 | 578 // |
579 // It would have been so much easier if the delimiters were simply | |
580 // different for the expression on the left hand side of the equals | |
581 // operator. | |
971 | 582 // |
583 // It's also a pain in the ass to decide whether to insert a comma | |
584 // after seeing a ']' character... | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
585 |
17861
870f3e12e163
maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
586 // FIXME: we need to handle block comments here. |
968 | 587 %} |
588 | |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
589 <MATRIX_START>\] { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
590 curr_lexer->lexer_debug ("<MATRIX_START>\\]"); |
8535 | 591 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
592 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
|
593 return curr_lexer->handle_close_bracket (']'); |
4608 | 594 } |
595 | |
7723
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
596 %{ |
17861
870f3e12e163
maint: Use phrase "FIXME:" for problem areas in code.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
597 // 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
|
598 %} |
74f5e0c7de9e
first pass at handling block comments
John W. Eaton <jwe@octave.org>
parents:
7722
diff
changeset
|
599 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
600 <MATRIX_START>\} { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
601 curr_lexer->lexer_debug ("<MATRIX_START>\\}*"); |
8535 | 602 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
603 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
|
604 return curr_lexer->handle_close_bracket ('}'); |
967 | 605 } |
1 | 606 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
607 \[ { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
608 curr_lexer->lexer_debug ("\\["); |
8535 | 609 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
610 bool unput_comma = false; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
611 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
612 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
613 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
614 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
615 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
616 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
617 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
618 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
619 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
620 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
621 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
622 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
623 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
624 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
625 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
626 } |
5615 | 627 else |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
628 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
629 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
|
630 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
631 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
|
632 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
633 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
|
634 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
635 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
|
636 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
|
637 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
638 if (curr_lexer->m_defining_func |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
639 && ! 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
|
640 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
|
641 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
642 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
|
643 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
644 curr_lexer->m_bracketflag++; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
645 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
646 curr_lexer->push_start_state (MATRIX_START); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
647 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
648 return curr_lexer->count_token ('['); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
649 } |
967 | 650 } |
1 | 651 |
968 | 652 \] { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
653 curr_lexer->lexer_debug ("\\]"); |
8535 | 654 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
655 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
|
656 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
657 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
|
658 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
659 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
|
660 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
661 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
|
662 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
|
663 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
664 return curr_lexer->handle_token (']'); |
968 | 665 } |
666 | |
667 %{ | |
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
|
668 // 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
|
669 // 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
|
670 // 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
|
671 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
672 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
673 %{ |
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
|
674 // 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
|
675 // 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
|
676 // 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
|
677 // 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
|
678 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
679 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
680 ^{S}*{CCHAR}\{{S}*{NL} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
681 curr_lexer->lexer_debug ("^{S}*{CCHAR}\\{{S}*{NL}"); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
682 |
16253
a89cf57ba3a5
partial cleanup of continuation handling in lexer
John W. Eaton <jwe@octave.org>
parents:
16231
diff
changeset
|
683 yyless (0); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
684 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
685 curr_lexer->push_start_state (BLOCK_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
686 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
687 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
688 <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
|
689 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
|
690 |
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
|
691 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
|
692 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
693 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
|
694 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
|
695 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
696 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:
28113
diff
changeset
|
697 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
698 HANDLE_EOB_OR_EOF (-1); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
699 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
700 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
701 %{ |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
702 // 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
|
703 // 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
|
704 // 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
|
705 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
706 // 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
|
707 // 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
|
708 // follows. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
709 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
710 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
711 <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
|
712 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
|
713 |
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
|
714 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
|
715 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
716 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
|
717 curr_lexer->m_comment_text = "\n"; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
718 else |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
719 curr_lexer->finish_comment (octave::comment_elt::block); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
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_block_comment_nesting_level--; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
722 |
28147
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
723 int status = -1; |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
724 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
725 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:
28113
diff
changeset
|
726 { |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
727 status = -2; |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
728 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
729 curr_lexer->pop_start_state (); |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
730 } |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
731 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
732 HANDLE_EOB_OR_EOF (status); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
733 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
734 |
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 // Body of a block comment. |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
737 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
738 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
739 <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
|
740 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
|
741 |
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
|
742 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
|
743 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:
28113
diff
changeset
|
744 |
648202bebcb0
improve treatment of comments at interactive command line (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28113
diff
changeset
|
745 HANDLE_EOB_OR_EOF (-1); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
746 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
747 |
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 // Full-line or end-of-line comment. |
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 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
752 {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
|
753 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
|
754 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
755 curr_lexer->push_start_state (LINE_COMMENT_START); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
756 yyless (0); |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
757 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
758 |
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
|
759 %{ |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
760 // 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
|
761 // 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
|
762 // 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
|
763 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
764 // 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
|
765 // 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
|
766 // 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
|
767 %} |
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 |
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 <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
|
770 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
|
771 |
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 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
|
773 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
|
774 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
775 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
|
776 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
|
777 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
|
778 } |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
779 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
780 %{ |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
781 // 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
|
782 // 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
|
783 // 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
|
784 // 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
|
785 // 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
|
786 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
787 // 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
|
788 // 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
|
789 // 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
|
790 %} |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
791 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
792 <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
|
793 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
|
794 |
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
|
795 // 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
|
796 // 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
|
797 |
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
|
798 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
|
799 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
|
800 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
|
801 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
802 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
|
803 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
804 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
|
805 i++; |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
806 |
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[i]; |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
808 |
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
|
809 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
|
810 { |
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
|
811 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
|
812 } |
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
813 else |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
814 { |
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
|
815 // 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
|
816 |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
817 if (have_space) |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
818 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
|
819 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
820 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
|
821 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
822 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
|
823 |
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
|
824 // 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
|
825 // 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
|
826 // 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
|
827 |
16337
6bfd8dbd7d3c
don't swallow statements that follow comment lines (bug #38549)
John W. Eaton <jwe@octave.org>
parents:
16334
diff
changeset
|
828 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
|
829 |
5aad387784aa
fix line count in lexer when mixing line and block comments (bug #57121)
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
830 // The 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
|
831 // 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
|
832 // 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
|
833 curr_lexer->m_filepos.increment_column (yyleng); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
834 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
835 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
836 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
837 %{ |
27760
16e83787f970
fix handling of full line comments at command prompt (bug #57208)
John W. Eaton <jwe@octave.org>
parents:
27736
diff
changeset
|
838 // 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
|
839 // found on the input stream. |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
840 %} |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
841 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
842 <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
|
843 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
|
844 |
28264
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
845 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
|
846 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
847 // 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
|
848 // 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
|
849 // 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
|
850 // 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
|
851 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
852 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
|
853 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
854 // 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
|
855 // 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
|
856 // 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
|
857 // 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
|
858 // 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
|
859 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
860 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
|
861 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
862 else |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
863 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
864 // 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
|
865 // 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
|
866 // 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
|
867 // 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
|
868 // statement. |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
869 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
870 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
|
871 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
872 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
|
873 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
874 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
|
875 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
876 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
877 else |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
878 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
879 // 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
|
880 // 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
|
881 // 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
|
882 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
883 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
|
884 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
885 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
|
886 |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
887 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
|
888 } |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
889 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
890 |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
891 %{ |
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
|
892 // 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
|
893 %} |
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
|
894 |
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
|
895 <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
|
896 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
|
897 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
898 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
|
899 |
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
|
900 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
|
901 } |
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
|
902 |
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
|
903 %{ |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
904 // Double-quoted character strings. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
905 %} |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
906 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
907 <DQ_STRING_START>\"\" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
908 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
|
909 |
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
|
910 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
|
911 curr_lexer->m_string_text += '"'; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
912 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
913 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
914 <DQ_STRING_START>\" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
915 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
|
916 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
917 // 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
|
918 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
|
919 curr_lexer->m_filepos.increment_column (); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
920 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
921 curr_lexer->pop_start_state (); |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
922 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
923 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
|
924 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
925 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
|
926 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
|
927 |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
928 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
|
929 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
|
930 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
|
931 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
|
932 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
933 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
|
934 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
935 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
|
936 } |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
937 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
938 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
939 <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
|
940 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
|
941 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
942 curr_lexer->update_token_positions (yyleng); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
943 |
26450
af7faef288ad
lex.ll: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
944 unsigned int result; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
945 sscanf (yytext+1, "%o", &result); |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
946 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
947 if (result > 0xff) |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
948 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
949 // 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
|
950 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
951 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
952 "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
|
953 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
|
954 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
955 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
956 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
957 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
|
958 } |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
959 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
960 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
|
961 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
962 |
17244
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
963 <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
|
964 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
|
965 |
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
|
966 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
|
967 |
26450
af7faef288ad
lex.ll: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
968 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
|
969 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
|
970 |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
971 // 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
|
972 // 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
|
973 // 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
|
974 // 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
|
975 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
|
976 } |
9de751a10910
Add support for hexadecimal escape sequences in double-quoted strings (bug #39775)
Mike Miller <mtmiller@ieee.org>
parents:
16914
diff
changeset
|
977 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
978 <DQ_STRING_START>"\\a" { |
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>\"\\\\a\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
980 |
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
|
981 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
|
982 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
|
983 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
984 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
985 <DQ_STRING_START>"\\b" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
986 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
|
987 |
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
|
988 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
|
989 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
|
990 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
991 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
992 <DQ_STRING_START>"\\f" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
993 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
|
994 |
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
|
995 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
|
996 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
|
997 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
998 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
999 <DQ_STRING_START>"\\n" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1000 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
|
1001 |
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
|
1002 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
|
1003 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
|
1004 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1005 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1006 <DQ_STRING_START>"\\r" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1007 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
|
1008 |
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
|
1009 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
|
1010 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
|
1011 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1012 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1013 <DQ_STRING_START>"\\t" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1014 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
|
1015 |
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
|
1016 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
|
1017 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
|
1018 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1019 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1020 <DQ_STRING_START>"\\v" { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1021 curr_lexer->lexer_debug ("<DQ_STRING_START>\"\\\\v\""); |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1022 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1023 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1024 curr_lexer->m_string_text += '\v'; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1025 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1026 |
18428
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1027 <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
|
1028 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
|
1029 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1030 static const char *msg = "'...' continuations in double-quoted character strings are obsolete and will not be allowed in a future version of Octave; please use '\\' instead"; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1031 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1032 std::string nm = curr_lexer->m_fcn_file_full_name; |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1033 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1034 if (nm.empty ()) |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1035 warning_with_id ("Octave:deprecated-syntax", "%s", msg); |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1036 else |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1037 warning_with_id ("Octave:deprecated-syntax", |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1038 "%s; near line %d of file '%s'", msg, |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1039 curr_lexer->m_filepos.line (), nm.c_str ()); |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1040 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1041 HANDLE_STRING_CONTINUATION; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1042 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1043 |
18428
4d2e15abe5e7
Disallow comments after continuation in double-quoted strings (bug #41415).
Stefan Mahr <dac922@gmx.de>
parents:
18319
diff
changeset
|
1044 <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
|
1045 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
|
1046 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1047 static const char *msg = "white space and comments after continuation markers in double-quoted character strings are obsolete and will not be allowed in a future version of Octave"; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1048 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1049 std::string nm = curr_lexer->m_fcn_file_full_name; |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1050 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1051 if (nm.empty ()) |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1052 warning_with_id ("Octave:deprecated-syntax", "%s", msg); |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1053 else |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1054 warning_with_id ("Octave:deprecated-syntax", |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1055 "%s; near line %d of file '%s'", msg, |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1056 curr_lexer->m_filepos.line (), nm.c_str ()); |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1057 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1058 HANDLE_STRING_CONTINUATION; |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1059 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1060 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1061 <DQ_STRING_START>\\{NL} { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1062 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
|
1063 |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1064 HANDLE_STRING_CONTINUATION; |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1065 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1066 |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1067 <DQ_STRING_START>\\. { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1068 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
|
1069 |
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
|
1070 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
|
1071 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
|
1072 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1073 |
16914
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1074 <DQ_STRING_START>\. { |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1075 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
|
1076 |
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
|
1077 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
|
1078 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
|
1079 } |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1080 |
bc12849bb6cc
deprecate ... and whitespace/comments after continuation markers in strings
John W. Eaton <jwe@octave.org>
parents:
16904
diff
changeset
|
1081 <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
|
1082 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
|
1083 |
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
|
1084 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
|
1085 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
|
1086 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1087 |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1088 <DQ_STRING_START>{NL} { |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1089 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
|
1090 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1091 // 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
|
1092 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1093 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1094 "unterminated character string constant", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1095 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
|
1096 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1097 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1098 |
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
|
1099 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
|
1100 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1101 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
|
1102 } |
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1103 |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1104 %{ |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1105 // Single-quoted character strings. |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1106 %} |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1107 |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1108 <SQ_STRING_START>\'\' { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1109 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
|
1110 |
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
|
1111 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
|
1112 curr_lexer->m_string_text += '\''; |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1113 } |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1114 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1115 <SQ_STRING_START>\' { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1116 curr_lexer->lexer_debug ("<SQ_STRING_START>\\'"); |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1117 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1118 // 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
|
1119 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
|
1120 curr_lexer->m_filepos.increment_column (); |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1121 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1122 curr_lexer->pop_start_state (); |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1123 |
18224
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1124 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
|
1125 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1126 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
|
1127 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
|
1128 |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1129 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
|
1130 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
|
1131 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
|
1132 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
|
1133 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1134 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
|
1135 |
615fdd2238c1
improve compatibility of command syntax parsing (bug #41032)
Michael C. Grant <mcg@cvxr.com>
parents:
18139
diff
changeset
|
1136 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
|
1137 } |
16904
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1138 } |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1139 |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1140 <SQ_STRING_START>[^\'\n\r]+ { |
f29dd5a7591d
more tweaks for parsing character strings
John W. Eaton <jwe@octave.org>
parents:
16903
diff
changeset
|
1141 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
|
1142 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1143 curr_lexer->m_filepos.increment_column (yyleng); |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1144 curr_lexer->m_string_text += yytext; |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1145 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1146 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1147 <SQ_STRING_START>{NL} { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1148 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
|
1149 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1150 // Use current file position for error token. |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1151 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1152 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1153 "unterminated character string constant", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1154 curr_lexer->m_filepos, curr_lexer->m_filepos); |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1155 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1156 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1157 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1158 curr_lexer->m_filepos.next_line (); |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1159 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1160 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
16898
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1161 } |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1162 |
531473481084
rewrite string parsing to avoid unlimited lookahead
John W. Eaton <jwe@octave.org>
parents:
16788
diff
changeset
|
1163 %{ |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1164 // Fully-qualified identifiers (used for classdef). |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1165 %} |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1166 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1167 <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
|
1168 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
|
1169 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1170 curr_lexer->pop_start_state (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1171 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1172 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
|
1173 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1174 int id_tok = curr_lexer->handle_fq_identifier (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1175 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1176 if (id_tok >= 0) |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
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; |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1179 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1180 return curr_lexer->count_token_internal (id_tok); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1181 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1182 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1183 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1184 <FQ_IDENT_START>{S}+ { |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1185 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
|
1186 |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1187 curr_lexer->m_filepos.increment_column (yyleng); |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1188 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1189 curr_lexer->mark_previous_token_trailing_space (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1190 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1191 |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1192 <FQ_IDENT_START>(\.\.\.){ANY_EXCEPT_NL}*{NL} { |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1193 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
|
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.next_line (); |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1196 } |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1197 |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1198 <FQ_IDENT_START>{ANY_INCLUDING_NL} { |
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1199 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
|
1200 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1201 // 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
|
1202 // start state. |
27052
44d1fe403c19
eliminate mysterious newline output (bug #44934)
John W. Eaton <jwe@octave.org>
parents:
26899
diff
changeset
|
1203 |
18520
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1204 yyless (0); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1205 curr_lexer->pop_start_state (); |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1206 } |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1207 |
932aca9a7c57
Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18497
diff
changeset
|
1208 %{ |
968 | 1209 // Imaginary numbers. |
1210 %} | |
1211 | |
1212 {NUMBER}{Im} { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1213 curr_lexer->lexer_debug ("{NUMBER}{Im}"); |
8535 | 1214 |
16361
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1215 if (curr_lexer->previous_token_may_be_command () |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1216 && curr_lexer->space_follows_previous_token ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1217 { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1218 yyless (0); |
16361
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1219 curr_lexer->push_start_state (COMMAND_START); |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1220 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1221 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1222 { |
16361
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1223 int tok = curr_lexer->previous_token_value (); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1224 |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1225 if (curr_lexer->whitespace_is_significant () |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1226 && curr_lexer->space_follows_previous_token () |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1227 && ! (tok == '[' || tok == '{' |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1228 || curr_lexer->previous_token_is_binop ())) |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1229 { |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1230 yyless (0); |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
1231 curr_lexer->xunput (','); |
16361
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1232 } |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1233 else |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1234 { |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1235 curr_lexer->handle_number (); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1236 return curr_lexer->count_token_internal (IMAG_NUM); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1237 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1238 } |
968 | 1239 } |
1240 | |
1241 %{ | |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14161
diff
changeset
|
1242 // Real numbers. Don't grab the '.' part of a dot operator as part of |
968 | 1243 // the constant. |
1244 %} | |
1245 | |
20588
e34692daf663
Extend parser to accept '_' in numbers.
Rik <rik@octave.org>
parents:
20547
diff
changeset
|
1246 {D}{D_}*/\.[\*/\\^\'] | |
968 | 1247 {NUMBER} { |
20588
e34692daf663
Extend parser to accept '_' in numbers.
Rik <rik@octave.org>
parents:
20547
diff
changeset
|
1248 curr_lexer->lexer_debug ("{D}{D_}*/\\.[\\*/\\\\^\\']|{NUMBER}"); |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1249 |
16361
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1250 if (curr_lexer->previous_token_may_be_command () |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1251 && curr_lexer->space_follows_previous_token ()) |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1252 { |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1253 yyless (0); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1254 curr_lexer->push_start_state (COMMAND_START); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1255 } |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1256 else |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1257 { |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1258 int tok = curr_lexer->previous_token_value (); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1259 |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1260 if (curr_lexer->whitespace_is_significant () |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1261 && curr_lexer->space_follows_previous_token () |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1262 && ! (tok == '[' || tok == '{' |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1263 || curr_lexer->previous_token_is_binop ())) |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1264 { |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1265 yyless (0); |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
1266 curr_lexer->xunput (','); |
16361
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1267 } |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1268 else |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1269 { |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1270 curr_lexer->handle_number (); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1271 return curr_lexer->count_token_internal (NUM); |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1272 } |
e1dcd834751f
and foo NUMBER as command syntax (bug #38565)
John W. Eaton <jwe@octave.org>
parents:
16360
diff
changeset
|
1273 } |
968 | 1274 } |
1275 | |
1276 %{ | |
1277 // Eat whitespace. Whitespace inside matrix constants is handled by | |
4208 | 1278 // the <MATRIX_START> start state code above. |
968 | 1279 %} |
1280 | |
16363
d16c255299c0
recognize block comment begin while processing line comments (bug #38559)
John W. Eaton <jwe@octave.org>
parents:
16361
diff
changeset
|
1281 {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
|
1282 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
|
1283 |
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
1284 curr_lexer->mark_previous_token_trailing_space (); |
967 | 1285 } |
1286 | |
968 | 1287 %{ |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1288 // 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
|
1289 %} |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1290 |
18311
b14cdae65abd
prevent lexer from matching patterns across CR line endings (bug #41281)
John W. Eaton <jwe@octave.org>
parents:
18246
diff
changeset
|
1291 \.\.\.{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
|
1292 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
|
1293 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1294 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
|
1295 } |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1296 |
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 // Deprecated C preprocessor style continuation markers. |
968 | 1299 %} |
1300 | |
17246
8be8a65d3ca8
Ignore anything after the continuation marker '...' (bug #38653)
Stefan Mahr <dac922@gmx.de>
parents:
17244
diff
changeset
|
1301 \\{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
|
1302 \\{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
|
1303 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
|
1304 |
22505
7bdc80232cdc
Expand warning for '\' continuation marker to recommend "..." (bug #48810).
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
1305 static const char *msg = "using continuation marker \\ outside of double quoted strings is deprecated 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
|
1306 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1307 std::string nm = curr_lexer->m_fcn_file_full_name; |
17247
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1308 |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1309 if (nm.empty ()) |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1310 warning_with_id ("Octave:deprecated-syntax", "%s", msg); |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1311 else |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1312 warning_with_id ("Octave:deprecated-syntax", |
e993fa124b46
Deprecate \ as continuation marker outside of double-quoted character strings.
John W. Eaton <jwe@octave.org>
parents:
17246
diff
changeset
|
1313 "%s; near line %d of file '%s'", msg, |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
1314 curr_lexer->m_filepos.line (), nm.c_str ()); |
17343
6470a113eae2
correctly handle deprecated \ continuation markers
John W. Eaton <jwe@octave.org>
parents:
17247
diff
changeset
|
1315 |
6470a113eae2
correctly handle deprecated \ continuation markers
John W. Eaton <jwe@octave.org>
parents:
17247
diff
changeset
|
1316 curr_lexer->handle_continuation (); |
967 | 1317 } |
1 | 1318 |
968 | 1319 %{ |
1320 // End of file. | |
1321 %} | |
1322 | |
967 | 1323 <<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
|
1324 return curr_lexer->handle_end_of_input (); |
967 | 1325 } |
1 | 1326 |
968 | 1327 %{ |
16259
0b5ab09dfce4
2/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16257
diff
changeset
|
1328 // 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
|
1329 |
fc0ce9eb9d82
don't allow get and set followed by "(" to be recognized as keywords.
John W. Eaton <jwe@octave.org>
parents:
18341
diff
changeset
|
1330 // 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
|
1331 // followed by "(". |
968 | 1332 %} |
1333 | |
21705
764e586dca4b
Avoid use of REJECT in parser (bug #45947).
Rik <rik@octave.org>
parents:
21635
diff
changeset
|
1334 (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
|
1335 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
|
1336 } |
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 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1338 {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
|
1339 HANDLE_IDENTIFIER ("{IDENT}", false); |
967 | 1340 } |
1 | 1341 |
968 | 1342 %{ |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1343 // Superclass method identifiers. |
9476 | 1344 %} |
1345 | |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1346 {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
|
1347 curr_lexer->lexer_debug ("{FQIDENT}{S}*@{S}*{FQIDENT}"); |
9476 | 1348 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1349 if (curr_lexer->previous_token_may_be_command ()) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1350 { |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1351 yyless (0); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1352 curr_lexer->push_start_state (COMMAND_START); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1353 } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1354 else |
9476 | 1355 { |
26899
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1356 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
|
1357 { |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1358 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
|
1359 |
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
|
1360 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
|
1361 |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1362 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
|
1363 { |
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
|
1364 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
|
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 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
|
1367 { |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1368 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
|
1369 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
|
1370 |
26899
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1371 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
|
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 } |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1374 } |
236d8f52cbb3
identify "x .foo@bar" or "x @foo" as command syntax (bug #55891)
John W. Eaton <jwe@octave.org>
parents:
26740
diff
changeset
|
1375 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1376 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
|
1377 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
|
1378 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1379 return curr_lexer->handle_superclass_identifier (); |
9476 | 1380 } |
1381 } | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1382 |
9476 | 1383 %{ |
1384 // Metaclass query | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1385 %} |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1386 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1387 \?{S}*{FQIDENT} { |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
1388 curr_lexer->lexer_debug ("\\?{S}*{FQIDENT}"); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1389 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1390 if (curr_lexer->previous_token_may_be_command () |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1391 && curr_lexer->space_follows_previous_token ()) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1392 { |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1393 yyless (0); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1394 curr_lexer->push_start_state (COMMAND_START); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1395 } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1396 else |
9476 | 1397 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1398 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
|
1399 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1400 int id_tok = curr_lexer->handle_meta_identifier (); |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1401 |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1402 if (id_tok >= 0) |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1403 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1404 curr_lexer->m_looking_for_object_index = true; |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1405 |
16683
e1c6ad54259f
maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
diff
changeset
|
1406 return curr_lexer->count_token_internal (id_tok); |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1407 } |
9476 | 1408 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
1409 } |
9476 | 1410 |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1411 \@ | |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1412 \@{S}*{FQIDENT} { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1413 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
|
1414 |
16334
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1415 if (curr_lexer->previous_token_may_be_command () |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1416 && curr_lexer->space_follows_previous_token ()) |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1417 { |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1418 yyless (0); |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1419 curr_lexer->push_start_state (COMMAND_START); |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1420 } |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1421 else |
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1422 { |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1423 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
|
1424 |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1425 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
|
1426 && 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
|
1427 && ! (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
|
1428 || 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
|
1429 { |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1430 yyless (0); |
28773
9cd5d348d36c
use xunput consistently in lexer
John W. Eaton <jwe@octave.org>
parents:
28772
diff
changeset
|
1431 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
|
1432 } |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1433 else |
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1434 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1435 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
|
1436 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1437 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
|
1438 |
26740
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1439 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
|
1440 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1441 if (ident == "@") |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1442 { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1443 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
|
1444 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
|
1445 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1446 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
|
1447 } |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1448 else |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1449 { |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1450 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
|
1451 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
|
1452 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
|
1453 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1454 octave::token *tok; |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1455 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
1456 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
|
1457 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
|
1458 "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
|
1459 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
|
1460 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
|
1461 else |
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 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
|
1464 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1465 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
|
1466 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
|
1467 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
|
1468 } |
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 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
|
1471 |
cf271740922a
allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
1472 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
|
1473 } |
18492
e4c319ed2414
Fix regression, allow space-separated cell array of function handles (bug #41569)
Mike Miller <mtmiller@ieee.org>
parents:
18428
diff
changeset
|
1474 } |
16334
06aa4c0f2018
handle foo @... as command syntax
John W. Eaton <jwe@octave.org>
parents:
16325
diff
changeset
|
1475 } |
4342 | 1476 } |
1477 | |
1478 %{ | |
968 | 1479 // A new line character. New line characters inside matrix constants |
4208 | 1480 // are handled by the <MATRIX_START> start state code above. If closest |
985 | 1481 // nesting is inside parentheses, don't return a row separator. |
968 | 1482 %} |
1483 | |
967 | 1484 {NL} { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1485 curr_lexer->lexer_debug ("{NL}"); |
8535 | 1486 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1487 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
|
1488 { |
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
|
1489 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
|
1490 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1491 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
|
1492 curr_lexer->warn_language_extension |
16309
e608de76742c
allow newline to terminate anonymous function definition
John W. Eaton <jwe@octave.org>
parents:
16299
diff
changeset
|
1493 ("bare newline inside parentheses"); |
e608de76742c
allow newline to terminate anonymous function definition
John W. Eaton <jwe@octave.org>
parents:
16299
diff
changeset
|
1494 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1495 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
|
1496 || 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
|
1497 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1498 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
|
1499 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
|
1500 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1501 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
|
1502 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1503 return curr_lexer->count_token ('\n'); |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8745
diff
changeset
|
1504 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1505 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
|
1506 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1507 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
|
1508 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
|
1509 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1510 // 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
|
1511 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1512 = new octave::token (LEXICAL_ERROR, |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1513 "unexpected internal lexer error", |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1514 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
|
1515 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1516 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1517 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1518 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
|
1519 } |
967 | 1520 } |
1 | 1521 |
968 | 1522 %{ |
1523 // 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
|
1524 // operator. |
968 | 1525 %} |
1526 | |
967 | 1527 "'" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1528 curr_lexer->lexer_debug ("'"); |
8535 | 1529 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1530 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
|
1531 && curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1532 { |
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
|
1533 curr_lexer->m_filepos.increment_column (); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1534 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
|
1535 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
|
1536 } |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1537 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
|
1538 { |
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
|
1539 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
|
1540 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
|
1541 } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1542 else |
967 | 1543 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1544 int tok = curr_lexer->previous_token_value (); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1545 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1546 if (curr_lexer->whitespace_is_significant ()) |
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 (curr_lexer->space_follows_previous_token ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1549 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1550 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1551 || curr_lexer->previous_token_is_binop ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1552 { |
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
|
1553 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
|
1554 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
|
1555 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1556 else |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1557 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1558 yyless (0); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1559 curr_lexer->xunput (','); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1560 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1561 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1562 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1563 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1564 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1565 || curr_lexer->previous_token_is_binop () |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1566 || curr_lexer->previous_token_is_keyword ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1567 { |
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
|
1568 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
|
1569 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
|
1570 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1571 else |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1572 { |
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
|
1573 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
|
1574 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
|
1575 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1576 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1577 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1578 else |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1579 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1580 if (! tok || tok == '[' || tok == '{' || tok == '(' |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1581 || curr_lexer->previous_token_is_binop () |
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1582 || curr_lexer->previous_token_is_keyword ()) |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1583 { |
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
|
1584 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
|
1585 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
|
1586 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1587 else |
25719
e3c612c0b744
track column count in one more place in lexer
John W. Eaton <jwe@octave.org>
parents:
25708
diff
changeset
|
1588 { |
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
|
1589 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
|
1590 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
|
1591 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1592 } |
967 | 1593 } |
1594 } | |
1 | 1595 |
968 | 1596 %{ |
971 | 1597 // Double quotes always begin strings. |
1598 %} | |
1599 | |
973 | 1600 \" { |
16903
f21194531877
improve character string handling in the lexer
John W. Eaton <jwe@octave.org>
parents:
16898
diff
changeset
|
1601 curr_lexer->lexer_debug ("\\\""); |
8535 | 1602 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1603 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
|
1604 && curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1605 { |
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
|
1606 curr_lexer->m_filepos.increment_column (); |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1607 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
|
1608 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
|
1609 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1610 else |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1611 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1612 int tok = curr_lexer->previous_token_value (); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1613 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1614 if (curr_lexer->whitespace_is_significant ()) |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1615 { |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1616 if (curr_lexer->space_follows_previous_token ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1617 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1618 if (tok == '[' || tok == '{' |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1619 || curr_lexer->previous_token_is_binop ()) |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1620 { |
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
|
1621 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
|
1622 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
|
1623 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1624 else |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1625 { |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1626 yyless (0); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1627 curr_lexer->xunput (','); |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1628 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1629 } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1630 else |
16261
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1631 { |
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
|
1632 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
|
1633 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
|
1634 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1635 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1636 else |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1637 { |
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
|
1638 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
|
1639 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
|
1640 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1641 } |
b45a90cdb0ae
3/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16259
diff
changeset
|
1642 } |
971 | 1643 |
1644 %{ | |
968 | 1645 // Other operators. |
1646 %} | |
1647 | |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1648 ":" { CMD_OR_OP (":", ':', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1649 ".+" { CMD_OR_OP (".+", EPLUS, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1650 ".-" { CMD_OR_OP (".-", EMINUS, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1651 ".*" { CMD_OR_OP (".*", EMUL, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1652 "./" { CMD_OR_OP ("./", EDIV, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1653 ".\\" { CMD_OR_OP (".\\", ELEFTDIV, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1654 ".^" { CMD_OR_OP (".^", EPOW, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1655 ".**" { CMD_OR_OP (".**", EPOW, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1656 "<=" { CMD_OR_OP ("<=", EXPR_LE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1657 "==" { CMD_OR_OP ("==", EXPR_EQ, true); } |
27975
6931d95d1967
Use "!=" in preference to "~=" everywhere in code.
Rik <rik@octave.org>
parents:
27925
diff
changeset
|
1658 "!=" { CMD_OR_OP ("!=", EXPR_NE, false); } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1659 "~=" { CMD_OR_OP ("~=", EXPR_NE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1660 ">=" { CMD_OR_OP (">=", EXPR_GE, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1661 "&" { CMD_OR_OP ("&", EXPR_AND, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1662 "|" { CMD_OR_OP ("|", EXPR_OR, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1663 "<" { CMD_OR_OP ("<", EXPR_LT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1664 ">" { CMD_OR_OP (">", EXPR_GT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1665 "*" { CMD_OR_OP ("*", '*', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1666 "/" { CMD_OR_OP ("/", '/', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1667 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1668 %{ |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1669 // In Matlab, '\' may also trigger command syntax. |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1670 %} |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1671 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1672 "\\" { |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1673 curr_lexer->lexer_debug ("\\"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1674 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1675 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
|
1676 } |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1677 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1678 "^" { CMD_OR_OP ("^", POW, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1679 "**" { CMD_OR_OP ("**", POW, false); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1680 "&&" { CMD_OR_OP ("&&", EXPR_AND_AND, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1681 "||" { 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
|
1682 |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1683 ";" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1684 curr_lexer->lexer_debug (";"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1685 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1686 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1687 = (! (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
|
1688 || 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
|
1689 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1690 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
|
1691 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1692 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1693 "+" { CMD_OR_UNARY_OP ("+", '+', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1694 "-" { CMD_OR_UNARY_OP ("-", '-', true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1695 |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1696 "~" { CMD_OR_UNARY_OP ("~", EXPR_NOT, true); } |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1697 "!" { 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
|
1698 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1699 "," { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1700 curr_lexer->lexer_debug (","); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1701 |
16265
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1702 bool at_beginning_of_statement |
71ee3afedb69
5/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16263
diff
changeset
|
1703 = (! (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
|
1704 || 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
|
1705 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1706 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
|
1707 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1708 |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1709 ".'" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1710 curr_lexer->lexer_debug (".'"); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1711 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1712 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
|
1713 } |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1714 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1715 "++" { CMD_OR_UNARY_OP ("++", PLUS_PLUS, false); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1716 "--" { CMD_OR_UNARY_OP ("--", MINUS_MINUS, false); } |
1 | 1717 |
967 | 1718 "(" { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1719 curr_lexer->lexer_debug ("("); |
8535 | 1720 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1721 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1722 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1723 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1724 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1725 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1726 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1727 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1728 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1729 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1730 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1731 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1732 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1733 if (unput_comma) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1734 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1735 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1736 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1737 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1738 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1739 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1740 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
|
1741 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1742 // 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
|
1743 // 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
|
1744 // 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
|
1745 // the matching close paren). |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1746 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1747 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
|
1748 (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
|
1749 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1750 curr_lexer->m_looking_at_indirect_ref = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1751 curr_lexer->m_looking_for_object_index = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1752 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
|
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_nesting_level.paren (); |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1755 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1756 return curr_lexer->handle_token ('('); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1757 } |
967 | 1758 } |
1759 | |
1760 ")" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1761 curr_lexer->lexer_debug (")"); |
8535 | 1762 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1763 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
|
1764 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1765 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
|
1766 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1767 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
|
1768 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1769 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
|
1770 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
|
1771 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1772 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
|
1773 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1774 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
|
1775 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
|
1776 } |
13237
1bfca2bbea8b
fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents:
12801
diff
changeset
|
1777 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1778 return curr_lexer->count_token (')'); |
967 | 1779 } |
1780 | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
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 curr_lexer->lexer_debug ("."); |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1783 |
16325
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1784 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
|
1785 && curr_lexer->space_follows_previous_token ()) |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1786 { |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1787 yyless (0); |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1788 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
|
1789 } |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1790 else |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1791 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1792 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
|
1793 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1794 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
|
1795 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
|
1796 |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1797 return curr_lexer->handle_token ('.'); |
fc565603ccbb
also accept "." as possibly beginning a command
John W. Eaton <jwe@octave.org>
parents:
16320
diff
changeset
|
1798 } |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
1799 } |
8535 | 1800 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1801 %{ |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1802 // = and op= operators. |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1803 %} |
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1804 |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1805 "=" { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1806 curr_lexer->lexer_debug ("="); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
1807 |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1808 curr_lexer->maybe_mark_previous_token_as_variable (); |
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 return curr_lexer->handle_op ('='); |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1811 } |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
1812 |
16680
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1813 "+=" { CMD_OR_COMPUTED_ASSIGN_OP ("+=", ADD_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1814 "-=" { CMD_OR_COMPUTED_ASSIGN_OP ("-=", SUB_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1815 "*=" { CMD_OR_COMPUTED_ASSIGN_OP ("*=", MUL_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1816 "/=" { CMD_OR_COMPUTED_ASSIGN_OP ("/=", DIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1817 "\\=" { CMD_OR_COMPUTED_ASSIGN_OP ("\\=", LEFTDIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1818 ".+=" { CMD_OR_COMPUTED_ASSIGN_OP (".+=", ADD_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1819 ".-=" { CMD_OR_COMPUTED_ASSIGN_OP (".-=", SUB_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1820 ".*=" { CMD_OR_COMPUTED_ASSIGN_OP (".*=", EMUL_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1821 "./=" { CMD_OR_COMPUTED_ASSIGN_OP ("./=", EDIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1822 ".\\=" { CMD_OR_COMPUTED_ASSIGN_OP (".\\=", ELEFTDIV_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1823 "^=" { CMD_OR_COMPUTED_ASSIGN_OP ("^=", POW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1824 "**=" { CMD_OR_COMPUTED_ASSIGN_OP ("^=", POW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1825 ".^=" { CMD_OR_COMPUTED_ASSIGN_OP (".^=", EPOW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1826 ".**=" { CMD_OR_COMPUTED_ASSIGN_OP (".^=", EPOW_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1827 "&=" { CMD_OR_COMPUTED_ASSIGN_OP ("&=", AND_EQ); } |
de79cdbbdf7c
improve parsing of commands
John W. Eaton <jwe@octave.org>
parents:
16643
diff
changeset
|
1828 "|=" { CMD_OR_COMPUTED_ASSIGN_OP ("|=", OR_EQ); } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1829 |
16275
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1830 %{ |
dd7de0345124
10/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16273
diff
changeset
|
1831 // In Matlab, '{' may also trigger command syntax. |
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 |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1834 "{" { |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
1835 curr_lexer->lexer_debug ("{"); |
8535 | 1836 |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1837 bool unput_comma = false; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1838 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1839 if (curr_lexer->whitespace_is_significant () |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1840 && curr_lexer->space_follows_previous_token ()) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1841 { |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1842 int tok = curr_lexer->previous_token_value (); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1843 |
16267
15f55df088e7
6/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16265
diff
changeset
|
1844 if (! (tok == '[' || tok == '{' |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1845 || curr_lexer->previous_token_is_binop ())) |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1846 unput_comma = true; |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1847 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1848 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1849 if (unput_comma) |
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 yyless (0); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1852 curr_lexer->xunput (','); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1853 } |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1854 else |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1855 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1856 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
|
1857 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1858 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
|
1859 (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
|
1860 |
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
|
1861 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
|
1862 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
|
1863 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
|
1864 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1865 curr_lexer->m_braceflag++; |
16263
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1866 |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1867 curr_lexer->push_start_state (MATRIX_START); |
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 return curr_lexer->count_token ('{'); |
9acb86e6ac90
4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16261
diff
changeset
|
1870 } |
3351 | 1871 } |
1872 | |
1873 "}" { | |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1874 curr_lexer->lexer_debug ("}"); |
8535 | 1875 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1876 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
|
1877 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1878 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
|
1879 |
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_for_object_index = true; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1881 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
|
1882 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
1883 curr_lexer->m_nesting_level.remove (); |
3351 | 1884 |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1885 return curr_lexer->handle_token ('}'); |
3351 | 1886 } |
1887 | |
968 | 1888 %{ |
2066 | 1889 // Unrecognized input is a lexical error. |
968 | 1890 %} |
1 | 1891 |
2042 | 1892 . { |
16229
7b7b1e4968e8
use functions instead of token return macros in lexer
John W. Eaton <jwe@octave.org>
parents:
16228
diff
changeset
|
1893 curr_lexer->lexer_debug ("."); |
8535 | 1894 |
16125
96a58f197f93
allow xunput to be called without buffer argument
John W. Eaton <jwe@octave.org>
parents:
16124
diff
changeset
|
1895 curr_lexer->xunput (yytext[0]); |
16113
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1896 |
7c5e5e97a3bc
move static lexer helper functions to lexical_feedback class
John W. Eaton <jwe@octave.org>
parents:
16111
diff
changeset
|
1897 int c = curr_lexer->text_yyinput (); |
4248 | 1898 |
16294
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1899 if (c == 1) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1900 return -1; |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1901 else if (c == EOF) |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1902 return curr_lexer->handle_end_of_input (); |
0925d1f6875e
push parser/lexer interface
John W. Eaton <jwe@octave.org>
parents:
16293
diff
changeset
|
1903 else |
4240 | 1904 { |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1905 std::ostringstream buf; |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1906 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1907 buf << "invalid character '" |
25646
4d565baa475e
move libinterp/utils functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25443
diff
changeset
|
1908 << octave::undo_string_escape (static_cast<char> (c)) |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1909 << "' (ASCII " << c << ")"; |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1910 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
1911 // 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
|
1912 octave::token *tok |
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23061
diff
changeset
|
1913 = new octave::token (LEXICAL_ERROR, buf.str (), |
27769
07ffed9878ad
store begin and end position in tokens
John W. Eaton <jwe@octave.org>
parents:
27768
diff
changeset
|
1914 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
|
1915 |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1916 curr_lexer->push_token (tok); |
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1917 |
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
|
1918 curr_lexer->m_filepos.increment_column (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1919 |
21064
a9f2c2d72892
handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents:
21055
diff
changeset
|
1920 return curr_lexer->count_token_internal (LEXICAL_ERROR); |
4240 | 1921 } |
2066 | 1922 } |
1 | 1923 |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1924 %{ |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1925 #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
|
1926 // Disable these warnings for flex code. |
53ca76c5cc8d
maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents:
24387
diff
changeset
|
1927 # 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
|
1928 # 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
|
1929 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1930 %} |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1931 |
1 | 1932 %% |
1933 | |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1934 #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
|
1935 // 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
|
1936 # pragma GCC diagnostic pop |
21023
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1937 #endif |
ec532a439c6f
rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents:
20957
diff
changeset
|
1938 |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1939 void * |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1940 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
|
1941 { |
21942
aab79a1885cc
limit gnulib headers to liboctave/wrappers directory
John W. Eaton <jwe@octave.org>
parents:
21912
diff
changeset
|
1942 return std::malloc (size); |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1943 } |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1944 |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1945 void * |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1946 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
|
1947 { |
21942
aab79a1885cc
limit gnulib headers to liboctave/wrappers directory
John W. Eaton <jwe@octave.org>
parents:
21912
diff
changeset
|
1948 return std::realloc (ptr, size); |
19784
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1949 } |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1950 |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1951 void |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1952 octave_free (void *ptr, yyscan_t) |
a3577622952c
avoid some GCC unused parameter warnings
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
1953 { |
21942
aab79a1885cc
limit gnulib headers to liboctave/wrappers directory
John W. Eaton <jwe@octave.org>
parents:
21912
diff
changeset
|
1954 std::free (ptr); |
19784
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 |
8447
adab48231a03
make input_line_number work again
John W. Eaton <jwe@octave.org>
parents:
8312
diff
changeset
|
1957 static void |
8535 | 1958 display_character (char c) |
1959 { | |
1960 if (isgraph (c)) | |
1961 std::cerr << c; | |
1962 else | |
1963 switch (c) | |
1964 { | |
1965 case 0: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1966 std::cerr << "NUL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1967 break; |
8535 | 1968 |
1969 case 1: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1970 std::cerr << "SOH"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1971 break; |
8535 | 1972 |
1973 case 2: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1974 std::cerr << "STX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1975 break; |
8535 | 1976 |
1977 case 3: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1978 std::cerr << "ETX"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1979 break; |
8535 | 1980 |
1981 case 4: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1982 std::cerr << "EOT"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1983 break; |
8535 | 1984 |
1985 case 5: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1986 std::cerr << "ENQ"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1987 break; |
8535 | 1988 |
1989 case 6: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1990 std::cerr << "ACK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1991 break; |
8535 | 1992 |
1993 case 7: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1994 std::cerr << "\\a"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1995 break; |
8535 | 1996 |
1997 case 8: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1998 std::cerr << "\\b"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
1999 break; |
8535 | 2000 |
2001 case 9: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2002 std::cerr << "\\t"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2003 break; |
8535 | 2004 |
2005 case 10: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2006 std::cerr << "\\n"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2007 break; |
8535 | 2008 |
2009 case 11: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2010 std::cerr << "\\v"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2011 break; |
8535 | 2012 |
2013 case 12: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2014 std::cerr << "\\f"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2015 break; |
8535 | 2016 |
2017 case 13: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2018 std::cerr << "\\r"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2019 break; |
8535 | 2020 |
2021 case 14: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2022 std::cerr << "SO"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2023 break; |
8535 | 2024 |
2025 case 15: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2026 std::cerr << "SI"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2027 break; |
8535 | 2028 |
2029 case 16: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2030 std::cerr << "DLE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2031 break; |
8535 | 2032 |
2033 case 17: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2034 std::cerr << "DC1"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2035 break; |
8535 | 2036 |
2037 case 18: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2038 std::cerr << "DC2"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2039 break; |
8535 | 2040 |
2041 case 19: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2042 std::cerr << "DC3"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2043 break; |
8535 | 2044 |
2045 case 20: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2046 std::cerr << "DC4"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2047 break; |
8535 | 2048 |
2049 case 21: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2050 std::cerr << "NAK"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2051 break; |
8535 | 2052 |
2053 case 22: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2054 std::cerr << "SYN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2055 break; |
8535 | 2056 |
2057 case 23: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2058 std::cerr << "ETB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2059 break; |
8535 | 2060 |
2061 case 24: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2062 std::cerr << "CAN"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2063 break; |
8535 | 2064 |
2065 case 25: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2066 std::cerr << "EM"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2067 break; |
8535 | 2068 |
2069 case 26: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2070 std::cerr << "SUB"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2071 break; |
8535 | 2072 |
2073 case 27: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2074 std::cerr << "ESC"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2075 break; |
8535 | 2076 |
2077 case 28: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2078 std::cerr << "FS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2079 break; |
8535 | 2080 |
2081 case 29: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2082 std::cerr << "GS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2083 break; |
8535 | 2084 |
2085 case 30: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2086 std::cerr << "RS"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2087 break; |
8535 | 2088 |
2089 case 31: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2090 std::cerr << "US"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2091 break; |
8535 | 2092 |
2093 case 32: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2094 std::cerr << "SPACE"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2095 break; |
8535 | 2096 |
2097 case 127: | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2098 std::cerr << "DEL"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2099 break; |
8535 | 2100 } |
2101 } | |
8745
6dc61981d18b
better handling of object indexing in lexer
John W. Eaton <jwe@octave.org>
parents:
8701
diff
changeset
|
2102 |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2103 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
|
2104 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
|
2105 @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
|
2106 @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
|
2107 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
|
2108 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21942
diff
changeset
|
2109 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
|
2110 @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
|
2111 @end deftypefn */) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2112 { |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2113 octave_value retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2114 |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2115 int nargin = args.length (); |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2116 |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2117 if (nargin > 1) |
20798
bb585db6dee2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20773
diff
changeset
|
2118 print_usage (); |
bb585db6dee2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20773
diff
changeset
|
2119 |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2120 if (nargin == 0) |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2121 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2122 // 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
|
2123 // iskeyword function for additional details. |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2124 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2125 string_vector lst (TOTAL_KEYWORDS); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2126 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2127 int j = 0; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2128 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2129 for (int i = 0; i < TOTAL_KEYWORDS; i++) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2130 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2131 std::string kword = wordlist[i].name; |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2132 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
2133 if (! (kword == "set" || kword == "get" |
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
2134 || 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
|
2135 || kword == "methods" || kword == "properties")) |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2136 lst[j++] = kword; |
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 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2139 lst.resize (j); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2140 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2141 retval = Cell (lst.sort ()); |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2142 } |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2143 else |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2144 { |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2145 std::string name = args(0).xstring_value ("iskeyword: NAME must be a string"); |
26059
da2bbcf1fbcd
Deprecate C++ function is_keyword in favor of iskeyword for readability.
Rik <rik@octave.org>
parents:
25994
diff
changeset
|
2146 retval = octave::iskeyword (name); |
16114
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2147 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2148 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2149 return retval; |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2150 } |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2151 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2152 /* |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2153 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2154 %!assert (iskeyword ("for")) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2155 %!assert (iskeyword ("fort"), false) |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2156 %!assert (iskeyword ("fft"), false) |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2157 %!assert (iskeyword ("get"), false) |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2158 %!assert (iskeyword ("set"), false) |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2159 |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2160 %!error iskeyword ("A", "B") |
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20798
diff
changeset
|
2161 %!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
|
2162 |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2163 */ |
73a21ade0b6b
* lex.ll: Reorder function definitions.
John W. Eaton <jwe@octave.org>
parents:
16113
diff
changeset
|
2164 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2165 namespace octave |
16255
12bf6a3f8c45
store more info in token value class
John W. Eaton <jwe@octave.org>
parents:
16253
diff
changeset
|
2166 { |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2167 void |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2168 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
|
2169 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2170 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
|
2171 m_frame_stack.pop_front (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2172 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2173 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2174 void |
23602
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2175 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
|
2176 { |
23602
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2177 if (empty ()) |
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2178 panic_impossible (); |
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
2179 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2180 m_frame_stack.pop_front (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2181 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2182 |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24356
diff
changeset
|
2183 symbol_scope |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2184 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
|
2185 { |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2186 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
|
2187 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
|
2188 else |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2189 return m_frame_stack.front (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2190 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2191 |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24356
diff
changeset
|
2192 symbol_scope |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2193 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
|
2194 { |
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
|
2195 std::size_t sz = size (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2196 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2197 return (sz > 1 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2198 ? m_frame_stack[1] |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2199 : (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
|
2200 } |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23555
diff
changeset
|
2201 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2202 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
|
2203 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2204 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
|
2205 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2206 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2207 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2208 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
|
2209 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2210 // 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
|
2211 // index. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2212 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
|
2213 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2214 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2215 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2216 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
|
2217 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2218 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
|
2219 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
|
2220 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
|
2221 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
|
2222 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
|
2223 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
|
2224 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
|
2225 m_looking_at_initializer_expression = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2226 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
|
2227 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
|
2228 m_looking_at_indirect_ref = false; |
27736
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
2229 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
|
2230 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
|
2231 m_parsing_classdef = false; |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
2232 m_parsing_classdef_decl = false; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
2233 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
|
2234 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
|
2235 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
|
2236 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
|
2237 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
|
2238 m_force_script = false; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2239 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
|
2240 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
|
2241 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
|
2242 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
|
2243 m_bracketflag = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2244 m_braceflag = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2245 m_looping = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2246 m_defining_func = 0; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2247 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
|
2248 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
|
2249 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
|
2250 m_token_count = 0; |
27766
0ca7f17de041
use file position object to track line and column info in lexer and parser
John W. Eaton <jwe@octave.org>
parents:
27760
diff
changeset
|
2251 m_filepos = filepos (); |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2252 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
|
2253 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
|
2254 m_string_text = ""; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2255 m_current_input_line = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2256 m_comment_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2257 m_help_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2258 m_function_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2259 m_fcn_file_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2260 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
|
2261 m_dir_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2262 m_package_name = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2263 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
|
2264 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
|
2265 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2266 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
|
2267 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
|
2268 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2269 m_pending_local_variables.clear (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2270 m_symtab_context.clear (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2271 m_nesting_level.reset (); |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2272 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
|
2273 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2274 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2275 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2276 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
|
2277 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2278 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
|
2279 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
|
2280 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2281 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2282 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2283 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
|
2284 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2285 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
|
2286 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
|
2287 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2288 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2289 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2290 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
|
2291 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2292 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
|
2293 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
|
2294 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
|
2295 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2296 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2297 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2298 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
|
2299 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2300 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
|
2301 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
|
2302 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2303 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2304 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2305 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
|
2306 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2307 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
|
2308 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2309 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
|
2310 || 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
|
2311 || 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
|
2312 || 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
|
2313 || tok == EDIV_EQ || tok == ELEFTDIV || tok == ELEFTDIV_EQ |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2314 || tok == EMINUS || tok == EMUL || tok == EMUL_EQ |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2315 || 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
|
2316 || 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
|
2317 || 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
|
2318 || 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
|
2319 || 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
|
2320 || 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
|
2321 || 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
|
2322 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2323 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2324 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2325 lexical_feedback::previous_token_is_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
|
2326 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2327 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
|
2328 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
|
2329 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2330 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2331 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2332 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
|
2333 { |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2334 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
|
2335 return false; |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2336 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2337 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
|
2338 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
|
2339 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2340 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2341 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2342 lexical_feedback::maybe_mark_previous_token_as_variable (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2343 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2344 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
|
2345 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2346 if (tok && tok->is_symbol ()) |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2347 m_pending_local_variables.insert (tok->symbol_name ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2348 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2349 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2350 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2351 lexical_feedback::mark_as_variables (const std::list<std::string>& lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2352 { |
22872
551ac93c984c
maint: Use C++ range feature to simplify some for loops in libinterp/parse-tree
Rik <rik@octave.org>
parents:
22857
diff
changeset
|
2353 for (const auto& var : lst) |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2354 m_pending_local_variables.insert (var); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2355 } |
16360
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
2356 } |
11115c237231
recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents:
16337
diff
changeset
|
2357 |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2358 static bool |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2359 looks_like_copyright (const std::string& s) |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2360 { |
27925
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2361 if (s.empty ()) |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2362 return false; |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2363 |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2364 // 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
|
2365 // (including newlines) remains. |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2366 |
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
|
2367 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
|
2368 |
cf45351fc7fa
avoid parse exception when initial comment block is all whitespace
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
2369 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
|
2370 && (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
|
2371 || 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
|
2372 || s.substr (offset, 23) == "SPDX-License-Identifier")); |
16228
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2373 } |
e19b1632d7c1
revamp most comment handling
John W. Eaton <jwe@octave.org>
parents:
16224
diff
changeset
|
2374 |
23555
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2375 static bool |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2376 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
|
2377 { |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2378 return ((! s.empty ()) && (s[0] == '!')); |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2379 } |
9151922777e2
Pick correct help text when shebang is present (bug #51191).
Rik <rik@octave.org>
parents:
23479
diff
changeset
|
2380 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2381 namespace octave |
1 | 2382 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2383 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2384 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
|
2385 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2386 m_buffer = input; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2387 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
|
2388 m_offset = 0; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2389 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
|
2390 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2391 |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2392 // 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
|
2393 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
|
2394 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
|
2395 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
|
2396 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2397 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
|
2398 |
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
|
2399 std::size_t len = 0; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2400 if (by_lines) |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2401 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
2402 std::size_t 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
|
2403 len = (newline_pos != std::string::npos |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2404 ? newline_pos - m_offset + 1 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2405 : (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
|
2406 } |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2407 else |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2408 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
|
2409 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2410 assert (len > 0); |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2411 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
|
2412 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2413 m_chars_left -= len; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2414 m_offset += len; |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2415 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2416 // 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
|
2417 // line character. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2418 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2419 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
|
2420 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2421 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
|
2422 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2423 // 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
|
2424 // the buffer. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2425 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
|
2426 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2427 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2428 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2429 // 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
|
2430 // 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
|
2431 // to base_lexer::read. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2432 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2433 // 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
|
2434 // (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
|
2435 // 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
|
2436 // the next call. |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2437 |
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2438 m_buffer = eol; |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2439 m_chars_left = 1; |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
2440 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
|
2441 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2442 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2443 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2444 return len; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2445 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2446 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2447 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
|
2448 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2449 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
|
2450 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2451 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2452 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2453 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
|
2454 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2455 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
|
2456 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2457 // 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
|
2458 // flex-generated lexer. |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2459 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
|
2460 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2461 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
|
2462 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2463 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2464 // 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
|
2465 // 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
|
2466 // (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
|
2467 // 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
|
2468 // 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
|
2469 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2470 #define OCTAVE_YYG \ |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2471 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
|
2472 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2473 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2474 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
|
2475 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2476 // 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
|
2477 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
|
2478 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2479 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
|
2480 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2481 // 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
|
2482 // input. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2483 |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27086
diff
changeset
|
2484 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
|
2485 && ! (m_reading_fcn_file |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2486 || m_reading_classdef_file |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2487 || 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
|
2488 || 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
|
2489 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
|
2490 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2491 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
|
2492 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2493 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
|
2494 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2495 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2496 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2497 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
|
2498 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2499 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
|
2500 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2501 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
|
2502 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2503 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2504 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2505 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
|
2506 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2507 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
|
2508 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2509 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
|
2510 } |
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 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2513 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
|
2514 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2515 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
|
2516 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2517 m_tok_beg = m_filepos; |
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_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
|
2519 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2520 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
|
2521 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2522 warning ("block comment open at end of input"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2523 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2524 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
|
2525 && ! 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
|
2526 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
|
2527 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
|
2528 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2529 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2530 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
|
2531 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2532 push_token (tok_val); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2533 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
2534 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
|
2535 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2536 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2537 char * |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2538 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
|
2539 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2540 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
|
2541 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2542 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2543 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2544 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
|
2545 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2546 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
|
2547 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2548 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2549 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2550 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
|
2551 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2552 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
|
2553 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2554 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
|
2555 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2556 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
|
2557 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
|
2558 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
|
2559 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2560 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2561 // 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
|
2562 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2563 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
|
2564 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2565 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
|
2566 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2567 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
|
2568 { |
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 << "I: "; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2570 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
|
2571 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
|
2572 } |
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 != '\n') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2575 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2576 xunput (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2577 c = '\n'; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2578 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2579 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2580 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2581 return c; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2582 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2583 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2584 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2585 base_lexer::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
|
2586 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2587 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
|
2588 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
2589 if (debug_flag ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2590 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2591 std::cerr << "U: "; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2592 display_character (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2593 std::cerr << std::endl; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2594 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2595 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2596 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
|
2597 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2598 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2599 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2600 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2601 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
|
2602 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2603 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
|
2604 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2605 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
|
2606 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2607 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2608 void |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2609 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
|
2610 { |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2611 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
|
2612 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
|
2613 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2614 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
|
2615 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
|
2616 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2617 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
|
2618 } |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2619 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2620 bool |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2621 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
|
2622 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2623 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
|
2624 xunput (c); |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
2625 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
|
2626 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2627 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2628 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2629 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
|
2630 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2631 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
|
2632 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2633 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
|
2634 { |
22872
551ac93c984c
maint: Use C++ range feature to simplify some for loops in libinterp/parse-tree
Rik <rik@octave.org>
parents:
22857
diff
changeset
|
2635 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
|
2636 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2637 retval = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2638 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2639 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2640 } |
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 return retval; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2643 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2644 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2645 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2646 base_lexer::is_variable (const std::string& name, |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26482
diff
changeset
|
2647 const symbol_scope& /*scope*/) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2648 { |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2649 return ((m_interpreter.at_top_level () |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2650 && m_interpreter.is_variable (name)) |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
2651 || (m_pending_local_variables.find (name) |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2652 != m_pending_local_variables.end ())); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2653 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2654 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2655 int |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
2656 base_lexer::make_keyword_token (const std::string& s) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2657 { |
28679
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2658 // Token positions should have already been updated before this |
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2659 // function is called. |
9117c746de0c
improve tracking of token positions
John W. Eaton <jwe@octave.org>
parents:
28407
diff
changeset
|
2660 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2661 int slen = s.length (); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2662 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2663 const octave_kw *kw = octave_kw_hash::in_word_set (s.c_str (), slen); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2664 |
27770 | 2665 if (! kw) |
2666 return 0; | |
2667 | |
2668 bool previous_at_bos = m_at_beginning_of_statement; | |
2669 | |
2670 // May be reset to true for some token types. | |
2671 m_at_beginning_of_statement = false; | |
2672 | |
2673 token *tok_val = nullptr; | |
2674 | |
2675 switch (kw->kw_id) | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2676 { |
27770 | 2677 case break_kw: |
2678 case catch_kw: | |
2679 case continue_kw: | |
2680 case else_kw: | |
2681 case otherwise_kw: | |
2682 case return_kw: | |
2683 case unwind_protect_cleanup_kw: | |
2684 m_at_beginning_of_statement = true; | |
2685 break; | |
2686 | |
2687 case persistent_kw: | |
2688 case global_kw: | |
2689 m_looking_at_decl_list = true; | |
2690 break; | |
2691 | |
2692 case case_kw: | |
2693 case elseif_kw: | |
2694 case until_kw: | |
2695 break; | |
2696 | |
2697 case end_kw: | |
2698 if (inside_any_object_index () | |
2699 || (m_defining_func | |
2700 && ! (m_looking_at_return_list | |
2701 || m_parsed_function_name.top ()))) | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2702 { |
27770 | 2703 m_at_beginning_of_statement = previous_at_bos; |
2704 return 0; | |
2705 } | |
2706 | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2707 tok_val = new token (end_kw, token::simple_end, m_tok_beg, m_tok_end); |
27770 | 2708 m_at_beginning_of_statement = true; |
2709 break; | |
2710 | |
2711 case end_try_catch_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2712 tok_val = new token (end_try_catch_kw, token::try_catch_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2713 m_tok_end); |
27770 | 2714 m_at_beginning_of_statement = true; |
2715 break; | |
2716 | |
2717 case end_unwind_protect_kw: | |
2718 tok_val = new token (end_unwind_protect_kw, | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2719 token::unwind_protect_end, m_tok_beg, m_tok_end); |
27770 | 2720 m_at_beginning_of_statement = true; |
2721 break; | |
2722 | |
2723 case endfor_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2724 tok_val = new token (endfor_kw, token::for_end, m_tok_beg, m_tok_end); |
27770 | 2725 m_at_beginning_of_statement = true; |
2726 break; | |
2727 | |
2728 case endfunction_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2729 tok_val = new token (endfunction_kw, token::function_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2730 m_tok_end); |
27770 | 2731 m_at_beginning_of_statement = true; |
2732 break; | |
2733 | |
2734 case endif_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2735 tok_val = new token (endif_kw, token::if_end, m_tok_beg, m_tok_end); |
27770 | 2736 m_at_beginning_of_statement = true; |
2737 break; | |
2738 | |
2739 case endparfor_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2740 tok_val = new token (endparfor_kw, token::parfor_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2741 m_tok_end); |
27770 | 2742 m_at_beginning_of_statement = true; |
2743 break; | |
2744 | |
2745 case endswitch_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2746 tok_val = new token (endswitch_kw, token::switch_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2747 m_tok_end); |
27770 | 2748 m_at_beginning_of_statement = true; |
2749 break; | |
2750 | |
2751 case endwhile_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2752 tok_val = new token (endwhile_kw, token::while_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2753 m_tok_end); |
27770 | 2754 m_at_beginning_of_statement = true; |
2755 break; | |
2756 | |
2757 case endclassdef_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2758 tok_val = new token (endclassdef_kw, token::classdef_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2759 m_tok_end); |
27770 | 2760 m_at_beginning_of_statement = true; |
2761 break; | |
2762 | |
2763 case endenumeration_kw: | |
2764 tok_val = new token (endenumeration_kw, token::enumeration_end, | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2765 m_tok_beg, m_tok_end); |
27770 | 2766 m_at_beginning_of_statement = true; |
2767 break; | |
2768 | |
2769 case endevents_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2770 tok_val = new token (endevents_kw, token::events_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2771 m_tok_end); |
27770 | 2772 m_at_beginning_of_statement = true; |
2773 break; | |
2774 | |
2775 case endmethods_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2776 tok_val = new token (endmethods_kw, token::methods_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2777 m_tok_end); |
27770 | 2778 m_at_beginning_of_statement = true; |
2779 break; | |
2780 | |
2781 case endproperties_kw: | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2782 tok_val = new token (endproperties_kw, token::properties_end, m_tok_beg, |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2783 m_tok_end); |
27770 | 2784 m_at_beginning_of_statement = true; |
2785 break; | |
2786 | |
2787 | |
2788 case for_kw: | |
2789 case parfor_kw: | |
2790 case while_kw: | |
2791 m_looping++; | |
2792 break; | |
2793 | |
2794 case do_kw: | |
2795 m_at_beginning_of_statement = true; | |
2796 m_looping++; | |
2797 break; | |
2798 | |
2799 case try_kw: | |
2800 case unwind_protect_kw: | |
2801 m_at_beginning_of_statement = true; | |
2802 break; | |
2803 | |
2804 case if_kw: | |
2805 case switch_kw: | |
2806 break; | |
2807 | |
2808 case get_kw: | |
2809 case set_kw: | |
2810 // 'get' and 'set' are keywords in classdef method | |
2811 // declarations. | |
2812 if (! m_maybe_classdef_get_set_method) | |
2813 { | |
2814 m_at_beginning_of_statement = previous_at_bos; | |
2815 return 0; | |
2816 } | |
2817 break; | |
2818 | |
2819 case enumeration_kw: | |
2820 case events_kw: | |
2821 case methods_kw: | |
2822 case properties_kw: | |
2823 // 'properties', 'methods' and 'events' are keywords for | |
2824 // classdef blocks. | |
2825 if (! m_parsing_classdef) | |
2826 { | |
2827 m_at_beginning_of_statement = previous_at_bos; | |
2828 return 0; | |
2829 } | |
2830 // fall through ... | |
2831 | |
2832 case classdef_kw: | |
2833 // 'classdef' is always a keyword. | |
2834 if (! m_force_script && m_token_count == 0 && input_from_file ()) | |
2835 { | |
2836 m_reading_classdef_file = true; | |
2837 m_reading_script_file = false; | |
2838 } | |
2839 break; | |
2840 | |
2841 case function_kw: | |
2842 m_defining_func++; | |
2843 m_parsed_function_name.push (false); | |
2844 | |
2845 if (! m_force_script && m_token_count == 0 && input_from_file ()) | |
2846 { | |
2847 m_reading_fcn_file = true; | |
2848 m_reading_script_file = false; | |
2849 } | |
2850 | |
2851 if (! (m_reading_fcn_file || m_reading_script_file | |
2852 || m_reading_classdef_file)) | |
2853 { | |
2854 // Input must be coming from the terminal or stdin? | |
2855 m_buffer_function_text = true; | |
2856 m_function_text += (m_current_input_line + "\n"); | |
2857 | |
2858 // FIXME: do we need to save and restore the file position | |
2859 // or just reset the line number here? The goal is to | |
2860 // track line info for command-line functions relative | |
2861 // to the function keyword. | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2862 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2863 m_filepos = filepos (); |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2864 update_token_positions (slen); |
27770 | 2865 } |
2866 break; | |
2867 | |
2868 case magic_file_kw: | |
2869 { | |
2870 if ((m_reading_fcn_file || m_reading_script_file | |
2871 || m_reading_classdef_file) | |
2872 && ! m_fcn_file_full_name.empty ()) | |
2873 tok_val = new token (magic_file_kw, m_fcn_file_full_name, | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2874 m_tok_beg, m_tok_end); |
27770 | 2875 else |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2876 tok_val = new token (magic_file_kw, "stdin", m_tok_beg, m_tok_end); |
27770 | 2877 } |
2878 break; | |
2879 | |
2880 case magic_line_kw: | |
2881 { | |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2882 int l = m_tok_beg.line (); |
27770 | 2883 tok_val = new token (magic_line_kw, static_cast<double> (l), |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
2884 "", m_tok_beg, m_tok_end); |
27770 | 2885 } |
2886 break; | |
2887 | |
2888 default: | |
2889 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
|
2890 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2891 |
27770 | 2892 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
|
2893 tok_val = new token (kw->tok, true, m_tok_beg, m_tok_end); |
27770 | 2894 |
2895 push_token (tok_val); | |
2896 | |
2897 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
|
2898 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2899 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2900 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2901 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
|
2902 { |
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
|
2903 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
|
2904 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
|
2905 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2906 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
|
2907 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2908 do |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2909 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2910 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
|
2911 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2912 if (p2 != std::string::npos) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2913 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2914 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
|
2915 p1 = p2 + 1; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
2916 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2917 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2918 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
|
2919 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
2920 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
|
2921 return true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2922 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2923 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
|
2924 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2925 return false; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2926 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2927 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2928 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2929 base_lexer::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
|
2930 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
2931 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
|
2932 || (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
|
2933 && ! 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
|
2934 } |
16257
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2935 } |
db7f07b22b9b
1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents:
16255
diff
changeset
|
2936 |
3220 | 2937 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
|
2938 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
|
2939 { |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2940 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
|
2941 } |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2942 |
7c0e10f035bd
Extend parser to accept binary constants that begin with '0b' or '0B'.
Rik <rik@octave.org>
parents:
20588
diff
changeset
|
2943 static inline bool |
3220 | 2944 looks_like_hex (const char *s, int len) |
2945 { | |
2946 return (len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')); | |
2947 } | |
2948 | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2949 namespace octave |
4037 | 2950 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2951 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2952 base_lexer::handle_number (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2953 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2954 double value = 0.0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2955 int nread = 0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2956 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2957 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
|
2958 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2959 // Strip any underscores |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2960 char *tmptxt = strsave (yytxt); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2961 char *rptr = tmptxt; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2962 char *wptr = tmptxt; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2963 while (*rptr) |
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 *wptr = *rptr++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2966 wptr += (*wptr != '_'); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2967 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2968 *wptr = '\0'; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2969 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2970 if (looks_like_hex (tmptxt, strlen (tmptxt))) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2971 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2972 uintmax_t long_int_value; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2973 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2974 nread = sscanf (tmptxt, "%jx", &long_int_value); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2975 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2976 value = static_cast<double> (long_int_value); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2977 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2978 else if (looks_like_bin (tmptxt, strlen (tmptxt))) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2979 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2980 uintmax_t long_int_value = 0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2981 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2982 for (size_t i = 0; i < strlen (tmptxt); i++) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2983 { |
23211
08042580fe93
Fix incorrect handling of 0b binary numbers in complex contstants.
Rik <rik@octave.org>
parents:
22505
diff
changeset
|
2984 if (tmptxt[i] == '0') |
08042580fe93
Fix incorrect handling of 0b binary numbers in complex contstants.
Rik <rik@octave.org>
parents:
22505
diff
changeset
|
2985 long_int_value <<= 1; |
08042580fe93
Fix incorrect handling of 0b binary numbers in complex contstants.
Rik <rik@octave.org>
parents:
22505
diff
changeset
|
2986 else if (tmptxt[i] == '1') |
08042580fe93
Fix incorrect handling of 0b binary numbers in complex contstants.
Rik <rik@octave.org>
parents:
22505
diff
changeset
|
2987 { |
08042580fe93
Fix incorrect handling of 0b binary numbers in complex contstants.
Rik <rik@octave.org>
parents:
22505
diff
changeset
|
2988 long_int_value <<= 1; |
08042580fe93
Fix incorrect handling of 0b binary numbers in complex contstants.
Rik <rik@octave.org>
parents:
22505
diff
changeset
|
2989 long_int_value += 1; |
08042580fe93
Fix incorrect handling of 0b binary numbers in complex contstants.
Rik <rik@octave.org>
parents:
22505
diff
changeset
|
2990 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2991 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2992 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2993 value = static_cast<double> (long_int_value); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2994 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2995 nread = 1; // Just to pass the assert stmt below |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2996 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2997 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2998 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2999 char *idx = strpbrk (tmptxt, "Dd"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3000 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3001 if (idx) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3002 *idx = 'e'; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3003 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3004 nread = sscanf (tmptxt, "%lf", &value); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3005 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3006 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3007 delete [] tmptxt; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3008 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3009 // 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
|
3010 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3011 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
|
3012 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3013 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
|
3014 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
|
3015 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3016 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
|
3017 |
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3018 push_token (new token (NUM, value, yytxt, 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
|
3019 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3020 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3021 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3022 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
|
3023 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3024 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
|
3025 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
|
3026 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3027 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
|
3028 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
|
3029 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
|
3030 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3031 offset = 3; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3032 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3033 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
|
3034 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
|
3035 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3036 char c = yytxt[offset]; |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
3037 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
|
3038 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3039 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
|
3040 offset++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3041 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3042 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3043 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3044 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3045 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3046 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
|
3047 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
|
3048 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3049 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
|
3050 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
|
3051 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3052 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
|
3053 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
|
3054 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3055 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
|
3056 offset++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3057 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3058 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3059 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3060 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3061 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3062 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
|
3063 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3064 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
|
3065 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3066 // 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
|
3067 // 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
|
3068 // 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
|
3069 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3070 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
|
3071 |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3072 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
|
3073 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3074 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
|
3075 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3076 |
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
|
3077 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
|
3078 } |
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 void |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3081 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
|
3082 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3083 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
|
3084 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3085 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
|
3086 && ! 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
|
3087 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
|
3088 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3089 if (copyright) |
23750
ea879bc55272
move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents:
23730
diff
changeset
|
3090 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
|
3091 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3092 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
|
3093 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3094 m_comment_text = ""; |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3095 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3096 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
|
3097 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3098 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3099 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3100 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
|
3101 { |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3102 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
|
3103 |
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3104 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
|
3105 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
|
3106 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3107 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
|
3108 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3109 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
|
3110 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3111 if (bracket_type == ']') |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3112 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
|
3113 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
|
3114 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
|
3115 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3116 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
|
3117 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3118 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3119 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
|
3120 |
25708
ca38400776bc
track column count in lexer in a few more places (bug #34852)
John W. Eaton <jwe@octave.org>
parents:
25646
diff
changeset
|
3121 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
|
3122 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3123 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3124 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3125 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
|
3126 { |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
3127 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
|
3128 return false; |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
3129 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3130 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
|
3131 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
|
3132 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3133 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
|
3134 && 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
|
3135 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3136 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3137 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3138 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
|
3139 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3140 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3141 |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3142 std::string txt = flex_yytext (); |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3143 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3144 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
|
3145 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3146 |
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
|
3147 std::size_t pos = txt.find ("@"); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3148 |
26718
9b0335f4bc74
revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents:
26710
diff
changeset
|
3149 std::string meth = txt.substr (0, pos); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3150 std::string cls = txt.substr (pos + 1); |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
3151 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
3152 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
|
3153 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3154 token *tok |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3155 = 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
|
3156 "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
|
3157 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
|
3158 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3159 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
|
3160 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3161 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
|
3162 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3163 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3164 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
|
3165 |
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
|
3166 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
|
3167 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3168 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
|
3169 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3170 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3171 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3172 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
|
3173 { |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3174 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
|
3175 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3176 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
|
3177 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3178 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3179 // Eliminate leading '?' |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3180 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
|
3181 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3182 // 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
|
3183 // 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
|
3184 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3185 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
|
3186 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3187 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
|
3188 "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
|
3189 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
|
3190 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
|
3191 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3192 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
|
3193 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3194 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3195 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
|
3196 |
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
|
3197 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
|
3198 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3199 return METAQUERY; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3200 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3201 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3202 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3203 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
|
3204 { |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3205 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
|
3206 |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3207 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
|
3208 txt.end ()); |
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3209 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3210 // 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
|
3211 // 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
|
3212 |
26708
606605d0cd31
allow spaces in FQ_IDENT, SUPERCLASSREF, and METAQUERY tokens in lexer
John W. Eaton <jwe@octave.org>
parents:
26686
diff
changeset
|
3213 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
|
3214 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3215 token *tok |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3216 = 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
|
3217 "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
|
3218 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
|
3219 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3220 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
|
3221 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3222 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
|
3223 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3224 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3225 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
|
3226 |
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
|
3227 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
|
3228 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3229 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
|
3230 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3231 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3232 // 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
|
3233 // 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
|
3234 // 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
|
3235 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3236 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3237 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
|
3238 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3239 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3240 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3241 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
|
3242 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3243 // 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
|
3244 // 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
|
3245 // 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
|
3246 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3247 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
|
3248 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3249 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
|
3250 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3251 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
|
3252 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3253 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
|
3254 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3255 |
28156
22cddebcb0d0
allow @get and @set to work properly again (bug #57988)
John W. Eaton <jwe@octave.org>
parents:
28149
diff
changeset
|
3256 // 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
|
3257 // 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
|
3258 // 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
|
3259 |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
3260 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
|
3261 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3262 // 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
|
3263 // 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
|
3264 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3265 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
|
3266 { |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3267 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
|
3268 |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
3269 // 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
|
3270 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3271 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
|
3272 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3273 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3274 // Find the token in the symbol table. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3275 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3276 symbol_scope scope = m_symtab_context.curr_scope (); |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24356
diff
changeset
|
3277 |
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24356
diff
changeset
|
3278 symbol_record sr = (scope ? scope.insert (ident) : symbol_record (ident)); |
23602
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
3279 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3280 token *tok = new token (NAME, sr, 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
|
3281 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3282 // The following symbols are handled specially so that things like |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3283 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3284 // pi +1 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3285 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3286 // are parsed as an addition expression instead of as a command-style |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3287 // function call with the argument "+1". |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3288 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3289 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
|
3290 && ! (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
|
3291 || is_variable (ident, scope) |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3292 || ident == "e" || ident == "pi" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3293 || ident == "I" || ident == "i" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3294 || ident == "J" || ident == "j" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3295 || ident == "Inf" || ident == "inf" |
bd80e14f268a
improve parse error message for @()x+=expr (bug #57255)
John W. Eaton <jwe@octave.org>
parents:
27578
diff
changeset
|
3296 || 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
|
3297 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
|
3298 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3299 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
|
3300 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3301 // 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
|
3302 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3303 if (ident != "end") |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3304 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
|
3305 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3306 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
|
3307 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3308 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
|
3309 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3310 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3311 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3312 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
|
3313 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3314 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
|
3315 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3316 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
|
3317 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
|
3318 "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
|
3319 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
|
3320 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3321 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
|
3322 "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
|
3323 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
|
3324 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3325 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3326 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3327 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
|
3328 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3329 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
|
3330 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3331 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
|
3332 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
|
3333 "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
|
3334 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
|
3335 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3336 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
|
3337 "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
|
3338 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
|
3339 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3340 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3341 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3342 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
|
3343 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3344 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
|
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 (nm.empty ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3347 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
|
3348 "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
|
3349 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
|
3350 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3351 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
|
3352 "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
|
3353 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
|
3354 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3355 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3356 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3357 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
|
3358 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3359 if (c == '#') |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3360 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
|
3361 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3362 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3363 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3364 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
|
3365 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3366 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
|
3367 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3368 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3369 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3370 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
|
3371 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3372 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
|
3373 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
|
3374 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
|
3375 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
|
3376 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
|
3377 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3378 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3379 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3380 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
|
3381 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3382 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
|
3383 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
|
3384 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
|
3385 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3386 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3387 token * |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3388 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
|
3389 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3390 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
|
3391 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
|
3392 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3393 |
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
|
3394 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
|
3395 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
|
3396 { |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3397 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
|
3398 } |
d938c4d22200
handle comments in multi-line statements with push parser/lexer (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
28262
diff
changeset
|
3399 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3400 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3401 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
|
3402 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3403 switch (tok) |
16119
b31eb56f4d84
maint: reorder class definitions in lex.ll
John W. Eaton <jwe@octave.org>
parents:
16118
diff
changeset
|
3404 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3405 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
|
3406 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
|
3407 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
|
3408 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
|
3409 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
|
3410 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
|
3411 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
|
3412 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
|
3413 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
|
3414 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
|
3415 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
|
3416 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
|
3417 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
|
3418 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
|
3419 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
|
3420 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
|
3421 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
|
3422 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
|
3423 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
|
3424 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
|
3425 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
|
3426 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
|
3427 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
|
3428 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
|
3429 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
|
3430 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
|
3431 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
|
3432 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
|
3433 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
|
3434 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
|
3435 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
|
3436 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
|
3437 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
|
3438 case EPLUS: std::cerr << "EPLUS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3439 case EMINUS: std::cerr << "EMINUS\n"; break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3440 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
|
3441 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
|
3442 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
|
3443 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
|
3444 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
|
3445 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
|
3446 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3447 case NUM: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3448 case IMAG_NUM: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3449 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3450 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
|
3451 std::cerr << (tok == NUM ? "NUM" : "IMAG_NUM") |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3452 << " [" << tok_val->number () << "]\n"; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3453 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3454 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3455 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3456 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
|
3457 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3458 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
|
3459 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
|
3460 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3461 break; |
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 case NAME: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3464 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3465 token *tok_val = current_token (); |
24270
bc3819b7cca1
don't use symbol_table:: nesting for symbol_record, symbol_scope, or fcn_info
John W. Eaton <jwe@octave.org>
parents:
24092
diff
changeset
|
3466 symbol_record sr = tok_val->sym_rec (); |
23602
214cb58ccc1c
use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
3467 std::cerr << "NAME [" << sr.name () << "]\n"; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3468 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3469 break; |
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 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
|
3472 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3473 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
|
3474 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
|
3475 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3476 token *tok_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
|
3477 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3478 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
|
3479 << " [" << 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
|
3480 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3481 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3482 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3483 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
|
3484 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
|
3485 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
|
3486 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
|
3487 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
|
3488 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
|
3489 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
|
3490 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
|
3491 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
|
3492 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
|
3493 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
|
3494 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
|
3495 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
|
3496 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
|
3497 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
|
3498 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
|
3499 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
|
3500 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
|
3501 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
|
3502 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
|
3503 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
|
3504 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
|
3505 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
|
3506 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
|
3507 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
|
3508 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
|
3509 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
|
3510 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
|
3511 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
|
3512 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
|
3513 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
|
3514 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
|
3515 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
|
3516 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
|
3517 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
|
3518 default: |
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 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
|
3521 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
|
3522 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3523 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
|
3524 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3525 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3526 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3527 } |
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 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3530 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
|
3531 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3532 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
|
3533 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3534 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3535 bool |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3536 base_lexer::debug_flag (void) const |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3537 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3538 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3539 return stgs.lexer_debug_flag (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3540 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3541 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3542 bool |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3543 base_lexer::display_tokens (void) const |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3544 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3545 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3546 return stgs.display_tokens (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3547 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3548 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3549 void |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3550 base_lexer::increment_token_count (void) |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3551 { |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3552 settings& stgs = m_interpreter.get_settings (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3553 stgs.increment_token_count (); |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3554 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3555 m_token_count++; |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3556 } |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3557 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3558 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3559 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
|
3560 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3561 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
|
3562 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3563 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
|
3564 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3565 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
|
3566 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3567 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
|
3568 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
|
3569 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3570 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3571 |
25994
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3572 bool |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3573 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
|
3574 { |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3575 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
|
3576 |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3577 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
|
3578 } |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25719
diff
changeset
|
3579 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3580 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3581 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
|
3582 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3583 OCTAVE_YYG; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3584 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3585 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
|
3586 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3587 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
|
3588 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3589 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3590 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3591 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
|
3592 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3593 OCTAVE_YYG; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3594 |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3595 start_state_stack.pop (); |
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3596 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3597 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
|
3598 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3599 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3600 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3601 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
|
3602 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3603 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
|
3604 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
|
3605 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3606 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
|
3607 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3608 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3609 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3610 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
|
3611 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3612 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
|
3613 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3614 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
|
3615 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3616 case INITIAL: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3617 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
|
3618 break; |
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 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
|
3621 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
|
3622 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3623 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3624 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
|
3625 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
|
3626 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3627 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3628 case INPUT_FILE_START: |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3629 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
|
3630 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3631 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3632 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
|
3633 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
|
3634 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3635 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3636 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
|
3637 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
|
3638 break; |
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 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
|
3641 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
|
3642 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3643 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3644 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
|
3645 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
|
3646 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3647 |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3648 case FQ_IDENT_START: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3649 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
|
3650 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3651 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3652 default: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3653 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
|
3654 break; |
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 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3658 bool |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3659 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
|
3660 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3661 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
|
3662 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3663 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
|
3664 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3665 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
|
3666 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3667 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
|
3668 xunput (c); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3669 |
26710
d6dd07dce2d2
use inline functions for matching whitespace in lexer
John W. Eaton <jwe@octave.org>
parents:
26709
diff
changeset
|
3670 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
|
3671 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3672 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
|
3673 || 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
|
3674 || ((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
|
3675 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
|
3676 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3677 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3678 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
|
3679 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3680 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3681 int |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3682 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
|
3683 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3684 if (! compat) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3685 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
|
3686 |
28149
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3687 update_token_positions (flex_yyleng ()); |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3688 |
026bff6a54d7
improve position tracking in the lexer (bug #57924)
John W. Eaton <jwe@octave.org>
parents:
28147
diff
changeset
|
3689 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
|
3690 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3691 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
|
3692 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
|
3693 |
26709
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3694 switch (tok) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3695 { |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3696 case EXPR_LT: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3697 if (m_parsing_classdef_decl) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3698 { |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3699 m_parsing_classdef_superclass = true; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3700 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
|
3701 } |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3702 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3703 |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3704 case EXPR_AND: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3705 if (m_parsing_classdef_superclass) |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3706 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
|
3707 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3708 |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3709 default: |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3710 break; |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3711 } |
17e7d310def8
revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents:
26708
diff
changeset
|
3712 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3713 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
|
3714 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3715 |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
3716 // 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
|
3717 // 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
|
3718 // function call. |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
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 int |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
3721 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
|
3722 { |
27777
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
3723 int tok = SQ_STRING; |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
3724 |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3725 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
|
3726 |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
3727 m_string_text = ""; |
3b6920ee4383
eliminate COMMAND_ARG_FINISH macro in lexer
John W. Eaton <jwe@octave.org>
parents:
27771
diff
changeset
|
3728 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
|
3729 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3730 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
|
3731 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3732 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3733 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3734 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
|
3735 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3736 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
|
3737 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
|
3738 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3739 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
|
3740 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3741 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
|
3742 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3743 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3744 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3745 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
|
3746 { |
27778
2f8559459314
store beginning and ending location info for tokens recognized by lexer
John W. Eaton <jwe@octave.org>
parents:
27777
diff
changeset
|
3747 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
|
3748 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3749 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
|
3750 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3751 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
|
3752 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3753 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3754 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3755 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
|
3756 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3757 if (tok != '\n') |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3758 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
|
3759 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3760 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
|
3761 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3762 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3763 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3764 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
|
3765 { |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3766 |
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3767 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
|
3768 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
|
3769 |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
3770 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
|
3771 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3772 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
|
3773 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
|
3774 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
|
3775 } |
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 return tok; |
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 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3780 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3781 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
|
3782 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3783 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
|
3784 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3785 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
|
3786 { |
27527
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
3787 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
|
3788 |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
3789 std::string ps |
27528
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
3790 = 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
|
3791 |
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
3792 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
|
3793 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3794 bool eof = false; |
27527
73be3c628eac
refactor input_reader class and its use in lexer
John W. Eaton <jwe@octave.org>
parents:
27526
diff
changeset
|
3795 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
|
3796 |
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3797 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
|
3798 |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3799 // 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
|
3800 // command line. |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3801 // |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3802 // 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
|
3803 // |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3804 // 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
|
3805 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3806 if (m_buffer_function_text) |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3807 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3808 if (! m_current_input_line.empty ()) |
23786
10136bfd46a3
lex.ll: Fix heap-buffer-overflow (bug #51533).
Rik <rik@octave.org>
parents:
23750
diff
changeset
|
3809 { |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3810 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
|
3811 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
|
3812 m_function_text += '\n'; |
23786
10136bfd46a3
lex.ll: Fix heap-buffer-overflow (bug #51533).
Rik <rik@octave.org>
parents:
23750
diff
changeset
|
3813 } |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3814 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3815 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3816 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3817 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
|
3818 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
|
3819 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3820 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
|
3821 |
27528
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
3822 m_initial_input = false; |
e51284fc0a51
eliminate promptflag from the lexer and input reader classes
John W. Eaton <jwe@octave.org>
parents:
27527
diff
changeset
|
3823 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3824 return status; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3825 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3826 |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3827 void |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3828 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
|
3829 { |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3830 // 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
|
3831 // 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
|
3832 // |
27771
cd566153edd6
split base_lexer::is_keyword_token into two functions
John W. Eaton <jwe@octave.org>
parents:
27770
diff
changeset
|
3833 // 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
|
3834 // 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
|
3835 // 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
|
3836 // 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
|
3837 // 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
|
3838 // 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
|
3839 // 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
|
3840 // 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
|
3841 // |
549273db93e4
cache current input line in push lexer
John W. Eaton <jwe@octave.org>
parents:
27443
diff
changeset
|
3842 // 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
|
3843 // 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
|
3844 // 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
|
3845 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3846 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
|
3847 m_current_input_line = input; |
23730
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3848 } |
85f1d31956c0
make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
3849 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3850 int |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3851 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
|
3852 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3853 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
|
3854 |
24833
7c88cf242111
use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
3855 if (m_input_buf.empty () && ! m_input_buf.at_eof ()) |
28113
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3856 { |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3857 // If the input buffer is empty or we are at the end of the |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3858 // buffer, insert ASCII 1 as a marker for subsequent rules. |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3859 // Don't insert a newline character in this case. Instead of |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3860 // calling input_buffer::fill followed immediately by |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3861 // input_buffer::copy_chunk, simply insert the marker directly |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3862 // in BUF. |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3863 |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3864 assert (max_size > 0); |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3865 |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3866 buf[0] = static_cast<char> (1); |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3867 status = 1; |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3868 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3869 else |
28113
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3870 { |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3871 // Note that the copy_chunk function may append a newline |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3872 // character to the input. |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3873 |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3874 if (! m_input_buf.empty ()) |
28407
808e3964987b
accept multi-line interactive input (bug #58370)
John W. Eaton <jwe@octave.org>
parents:
28264
diff
changeset
|
3875 status = m_input_buf.copy_chunk (buf, max_size, true); |
28113
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3876 else |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3877 status = YY_NULL; |
2a186f34eb96
in push lexer, don't insert NL with ASCII 1 marker (bug #57859)
John W. Eaton <jwe@octave.org>
parents:
27975
diff
changeset
|
3878 } |
22196
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 return status; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
3881 } |
16224
4a848eb52de2
use stack for tracking lexer start states
John W. Eaton <jwe@octave.org>
parents:
16209
diff
changeset
|
3882 } |