LibreOffice Module basic (master) 1
token.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22#include "scanner.hxx"
23
24// The tokenizer is stand-alone, i. e. he can be used from everywhere.
25// A BASIC-instance is necessary for error messages. Without BASIC the
26// errors are only counted. The BASIC is also necessary when an advanced
27// SBX-variable shall be used for recognition of data types etc.
28
29
31 NIL = 0,
32 // tokens between 0x20 and 0x3F are literals:
33 LPAREN = '(', RPAREN = ')', COMMA = ',', DOT = '.', EXCLAM = '!',
34 HASH = '#', SEMICOLON = ';',
35
36 // commands:
37 FIRSTKWD = 0x40,
41
42 // in the order of the data type enums!
45 // in the order of the data type enums!
51
66 // end of all keywords
68 // statement end
70 // operators:
73 EQ, NE, LT, GT, LE, GE,
76 // miscellaneous:
82
83 // from here there are JavaScript-tokens (same enum so that same type)
87
88 // JavaScript-operators
89 // _ASS_ = Assignment
99};
100
101class SbiTokenizer : public SbiScanner {
102protected:
105 sal_uInt16 nPLine, nPCol1, nPCol2; // pushback location
106 bool bEof;
107 bool bEos;
108 bool bAs; // last keyword was AS
109 bool bErrorIsSymbol; // Handle Error token as Symbol, not keyword
110public:
111 SbiTokenizer( const OUString&, StarBASIC* = nullptr );
112
113 bool IsEof() const { return bEof; }
114 bool IsEos() const { return bEos; }
115
116 void Push( SbiToken );
117 const OUString& Symbol( SbiToken ); // reconversion
118
119 SbiToken Peek(); // read the next token
120 SbiToken Next(); // read a token
121 bool MayBeLabel( bool= false );
122
123 void Error( ErrCode c ) { GenError( c ); }
124 void Error( ErrCode, SbiToken );
125 void Error( ErrCode, const OUString &);
126
127 static bool IsEoln( SbiToken t )
128 { return t == EOS || t == EOLN || t == REM; }
129 static bool IsKwd( SbiToken t )
130 { return t >= FIRSTKWD && t <= LASTKWD; }
131 static bool IsExtra( SbiToken t )
132 { return t >= FIRSTEXTRA; }
133 static OUString GetKeywordCase( std::u16string_view sKeyword );
134};
135
136
137/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
XPropertyListType t
void GenError(ErrCode)
Definition: scanner.cxx:75
SbiToken ePush
Definition: token.hxx:104
void Push(SbiToken)
Definition: token.cxx:227
bool IsEos() const
Definition: token.hxx:114
sal_uInt16 nPCol1
Definition: token.hxx:105
static bool IsExtra(SbiToken t)
Definition: token.hxx:131
static bool IsKwd(SbiToken t)
Definition: token.hxx:129
static OUString GetKeywordCase(std::u16string_view sKeyword)
Definition: token.cxx:562
bool bEof
Definition: token.hxx:106
bool IsEof() const
Definition: token.hxx:113
bool MayBeLabel(bool=false)
Definition: token.cxx:545
bool bAs
Definition: token.hxx:108
SbiToken Next()
Definition: token.cxx:309
sal_uInt16 nPLine
Definition: token.hxx:105
bool bErrorIsSymbol
Definition: token.hxx:109
static bool IsEoln(SbiToken t)
Definition: token.hxx:127
void Error(ErrCode c)
Definition: token.hxx:123
SbiToken Peek()
Definition: token.cxx:248
SbiToken eCurTok
Definition: token.hxx:103
const OUString & Symbol(SbiToken)
Definition: token.cxx:266
SbiTokenizer(const OUString &, StarBASIC *=nullptr)
Definition: token.cxx:213
sal_uInt16 nPCol2
Definition: token.hxx:105
bool bEos
Definition: token.hxx:107
SbiToken
Definition: token.hxx:30
@ ENDTYPE
Definition: token.hxx:65
@ JS_WITH
Definition: token.hxx:86
@ NOT
Definition: token.hxx:74
@ JS_BREAK
Definition: token.hxx:85
@ JS_COND_QUEST
Definition: token.hxx:93
@ MUL
Definition: token.hxx:71
@ TOBJECT
Definition: token.hxx:48
@ AS
Definition: token.hxx:38
@ FIRSTEXTRA
Definition: token.hxx:77
@ JS_ASS_XOR
Definition: token.hxx:92
@ OPEN
Definition: token.hxx:58
@ JS_INC
Definition: token.hxx:97
@ PRIVATE
Definition: token.hxx:59
@ JS_FUNCTION
Definition: token.hxx:85
@ GET
Definition: token.hxx:54
@ NUMBER
Definition: token.hxx:78
@ SUB
Definition: token.hxx:61
@ GT
Definition: token.hxx:73
@ LIB
Definition: token.hxx:80
@ JS_FOR
Definition: token.hxx:85
@ DEFSNG
Definition: token.hxx:43
@ MOD
Definition: token.hxx:72
@ SELECT
Definition: token.hxx:61
@ OPTIONAL_
Definition: token.hxx:80
@ CAT
Definition: token.hxx:75
@ REDIM
Definition: token.hxx:60
@ ALIAS
Definition: token.hxx:38
@ JS_BIT_OR
Definition: token.hxx:93
@ VBASUPPORT
Definition: token.hxx:98
@ DATATYPE1
Definition: token.hxx:46
@ EACH
Definition: token.hxx:52
@ JS_MOD
Definition: token.hxx:96
@ IF
Definition: token.hxx:55
@ JS_RSHIFT_Z
Definition: token.hxx:95
@ OUTPUT
Definition: token.hxx:79
@ ENDWITH
Definition: token.hxx:65
@ WEND
Definition: token.hxx:64
@ RPAREN
Definition: token.hxx:33
@ FIXSTRING
Definition: token.hxx:78
@ JS_RETURN
Definition: token.hxx:86
@ WHILE
Definition: token.hxx:64
@ TLONG
Definition: token.hxx:48
@ ERASE
Definition: token.hxx:52
@ JS_COMMA
Definition: token.hxx:90
@ PARAMARRAY
Definition: token.hxx:81
@ HASH
Definition: token.hxx:34
@ JS_ASS_RSHIFT_Z
Definition: token.hxx:91
@ JS_COND_SEL
Definition: token.hxx:93
@ TCURRENCY
Definition: token.hxx:48
@ JS_LE
Definition: token.hxx:94
@ LPAREN
Definition: token.hxx:33
@ RESUME
Definition: token.hxx:60
@ DEFCUR
Definition: token.hxx:43
@ CLASSMODULE
Definition: token.hxx:81
@ ACCESS
Definition: token.hxx:79
@ LOCK
Definition: token.hxx:80
@ IMPLEMENTS
Definition: token.hxx:58
@ LT
Definition: token.hxx:73
@ JS_ASS_PLUS
Definition: token.hxx:90
@ TVARIANT
Definition: token.hxx:49
@ NE
Definition: token.hxx:73
@ DEFDBL
Definition: token.hxx:43
@ DEFBOOL
Definition: token.hxx:44
@ ENDFUNC
Definition: token.hxx:65
@ RETURN
Definition: token.hxx:60
@ TINTEGER
Definition: token.hxx:47
@ ASSIGN
Definition: token.hxx:38
@ JS_THIS
Definition: token.hxx:86
@ GE
Definition: token.hxx:73
@ LINEINPUT
Definition: token.hxx:56
@ SEMICOLON
Definition: token.hxx:34
@ JS_BIT_NOT
Definition: token.hxx:96
@ ENUM
Definition: token.hxx:62
@ PRESERVE
Definition: token.hxx:80
@ ENDENUM
Definition: token.hxx:65
@ JS_GE
Definition: token.hxx:95
@ ENDIF
Definition: token.hxx:65
@ CDECL_
Definition: token.hxx:78
@ DEFSTR
Definition: token.hxx:43
@ WRITE
Definition: token.hxx:64
@ JS_NE
Definition: token.hxx:94
@ LOOP
Definition: token.hxx:56
@ TYPEOF
Definition: token.hxx:75
@ BYREF
Definition: token.hxx:78
@ LE
Definition: token.hxx:73
@ JS_NEW
Definition: token.hxx:85
@ DEFLNG
Definition: token.hxx:43
@ STOP
Definition: token.hxx:61
@ NAME
Definition: token.hxx:57
@ JS_BIT_AND
Definition: token.hxx:94
@ NIL
Definition: token.hxx:31
@ CLOSE
Definition: token.hxx:39
@ DIM
Definition: token.hxx:40
@ IS
Definition: token.hxx:75
@ REM
Definition: token.hxx:60
@ EQV
Definition: token.hxx:74
@ JS_ASS_AND
Definition: token.hxx:92
@ JS_VAR
Definition: token.hxx:86
@ JS_ASSIGNMENT
Definition: token.hxx:90
@ JS_PLUS
Definition: token.hxx:96
@ EXIT
Definition: token.hxx:52
@ TO
Definition: token.hxx:62
@ ELSEIF
Definition: token.hxx:52
@ IMP
Definition: token.hxx:75
@ ENDPROPERTY
Definition: token.hxx:65
@ JS_MUL
Definition: token.hxx:96
@ DEFINT
Definition: token.hxx:43
@ DIV
Definition: token.hxx:72
@ JS_ASS_MUL
Definition: token.hxx:90
@ GOSUB
Definition: token.hxx:54
@ AND
Definition: token.hxx:74
@ IN_
Definition: token.hxx:55
@ DOT
Definition: token.hxx:33
@ PLUS
Definition: token.hxx:72
@ EXCLAM
Definition: token.hxx:33
@ ENDSELECT
Definition: token.hxx:65
@ JS_MINUS
Definition: token.hxx:96
@ TBYTE
Definition: token.hxx:49
@ ELSE
Definition: token.hxx:52
@ DEFVAR
Definition: token.hxx:44
@ ENDSUB
Definition: token.hxx:65
@ JS_CONTINUE
Definition: token.hxx:85
@ WITHEVENTS
Definition: token.hxx:81
@ OR
Definition: token.hxx:74
@ PROPERTY
Definition: token.hxx:59
@ ON
Definition: token.hxx:58
@ TEXT
Definition: token.hxx:62
@ EOLN
Definition: token.hxx:69
@ ATTRIBUTE
Definition: token.hxx:58
@ FIRSTKWD
Definition: token.hxx:37
@ JS_ASS_LSHIFT
Definition: token.hxx:91
@ JS_LPAREN
Definition: token.hxx:97
@ SHARED
Definition: token.hxx:61
@ CASE
Definition: token.hxx:39
@ CONST_
Definition: token.hxx:39
@ EQ
Definition: token.hxx:73
@ ANY
Definition: token.hxx:80
@ RANDOM
Definition: token.hxx:79
@ LIKE
Definition: token.hxx:75
@ JS_ASS_MOD
Definition: token.hxx:91
@ DATATYPE2
Definition: token.hxx:50
@ UNTIL
Definition: token.hxx:63
@ BASE
Definition: token.hxx:80
@ JS_IF
Definition: token.hxx:85
@ FOR
Definition: token.hxx:53
@ TDOUBLE
Definition: token.hxx:48
@ OPTION
Definition: token.hxx:58
@ DECLARE
Definition: token.hxx:40
@ PTRSAFE
Definition: token.hxx:80
@ FUNCTION
Definition: token.hxx:53
@ JS_ASS_MINUS
Definition: token.hxx:90
@ JS_ASS_OR
Definition: token.hxx:92
@ LINE
Definition: token.hxx:56
@ LASTKWD
Definition: token.hxx:67
@ PRINT
Definition: token.hxx:59
@ RSET
Definition: token.hxx:60
@ NEXT
Definition: token.hxx:57
@ COMPATIBLE
Definition: token.hxx:81
@ JS_LSHIFT
Definition: token.hxx:95
@ BYVAL
Definition: token.hxx:78
@ SET
Definition: token.hxx:61
@ TYPE
Definition: token.hxx:62
@ ERROR_
Definition: token.hxx:49
@ THEN
Definition: token.hxx:62
@ CALL
Definition: token.hxx:39
@ JS_BIT_XOR
Definition: token.hxx:94
@ DO
Definition: token.hxx:40
@ STEP
Definition: token.hxx:61
@ JS_LOG_NOT
Definition: token.hxx:96
@ DEFDATE
Definition: token.hxx:43
@ XOR
Definition: token.hxx:74
@ JS_RPAREN
Definition: token.hxx:97
@ JS_LINDEX
Definition: token.hxx:97
@ READ
Definition: token.hxx:80
@ JS_GT
Definition: token.hxx:95
@ JS_ASS_DIV
Definition: token.hxx:91
@ JS_WHILE
Definition: token.hxx:86
@ LOCAL
Definition: token.hxx:56
@ TSINGLE
Definition: token.hxx:48
@ JS_EQ
Definition: token.hxx:94
@ TSTRING
Definition: token.hxx:48
@ DEFERR
Definition: token.hxx:44
@ LPRINT
Definition: token.hxx:56
@ JS_RSHIFT
Definition: token.hxx:95
@ END
Definition: token.hxx:52
@ LSET
Definition: token.hxx:56
@ FIRSTJAVA
Definition: token.hxx:84
@ BASIC_EXPLICIT
Definition: token.hxx:81
@ JS_LOG_OR
Definition: token.hxx:93
@ JS_LT
Definition: token.hxx:94
@ GOTO
Definition: token.hxx:54
@ EXPON
Definition: token.hxx:71
@ JS_ASS_RSHIFT
Definition: token.hxx:91
@ DEFOBJ
Definition: token.hxx:43
@ INPUT
Definition: token.hxx:55
@ JS_RINDEX
Definition: token.hxx:97
@ JS_LOG_AND
Definition: token.hxx:93
@ SYMBOL
Definition: token.hxx:78
@ EOS
Definition: token.hxx:69
@ STATIC
Definition: token.hxx:61
@ PUBLIC
Definition: token.hxx:59
@ TDATE
Definition: token.hxx:48
@ TBOOLEAN
Definition: token.hxx:49
@ JS_DEC
Definition: token.hxx:97
@ NEW
Definition: token.hxx:57
@ BINARY
Definition: token.hxx:79
@ APPEND
Definition: token.hxx:79
@ MINUS
Definition: token.hxx:72
@ NEG
Definition: token.hxx:71
@ COMMA
Definition: token.hxx:33
@ LET
Definition: token.hxx:56
@ JS_DIV
Definition: token.hxx:96
@ WITH
Definition: token.hxx:64
@ IDIV
Definition: token.hxx:72
@ GLOBAL
Definition: token.hxx:54
@ COMPARE
Definition: token.hxx:39