1*234bd5c5SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*234bd5c5SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*234bd5c5SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*234bd5c5SAndrew Rist * distributed with this work for additional information 6*234bd5c5SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*234bd5c5SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*234bd5c5SAndrew Rist * "License"); you may not use this file except in compliance 9*234bd5c5SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*234bd5c5SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*234bd5c5SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*234bd5c5SAndrew Rist * software distributed under the License is distributed on an 15*234bd5c5SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*234bd5c5SAndrew Rist * KIND, either express or implied. See the License for the 17*234bd5c5SAndrew Rist * specific language governing permissions and limitations 18*234bd5c5SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*234bd5c5SAndrew Rist *************************************************************/ 21*234bd5c5SAndrew Rist 22*234bd5c5SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef _PARSER_HXX 25cdf0e10cSrcweir #define _PARSER_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "expr.hxx" 28cdf0e10cSrcweir #include "codegen.hxx" 29cdf0e10cSrcweir #include "symtbl.hxx" 30cdf0e10cSrcweir 31cdf0e10cSrcweir 32cdf0e10cSrcweir #include <vector> 33cdf0e10cSrcweir typedef ::std::vector< String > StringVector; 34cdf0e10cSrcweir 35cdf0e10cSrcweir struct SbiParseStack; 36cdf0e10cSrcweir 37cdf0e10cSrcweir class SbiParser : public SbiTokenizer 38cdf0e10cSrcweir { 39cdf0e10cSrcweir friend class SbiExpression; 40cdf0e10cSrcweir 41cdf0e10cSrcweir SbiParseStack* pStack; // Block-Stack 42cdf0e10cSrcweir SbiProcDef* pProc; // aktuelle Prozedur 43cdf0e10cSrcweir SbiExprNode* pWithVar; // aktuelle With-Variable 44cdf0e10cSrcweir SbiToken eEndTok; // das Ende-Token 45cdf0e10cSrcweir sal_uInt32 nGblChain; // Chainkette fuer globale DIMs 46cdf0e10cSrcweir sal_Bool bGblDefs; // sal_True globale Definitionen allgemein 47cdf0e10cSrcweir sal_Bool bNewGblDefs; // sal_True globale Definitionen vor Sub 48cdf0e10cSrcweir sal_Bool bSingleLineIf; // sal_True einzeiliges if-Statement 49cdf0e10cSrcweir 50cdf0e10cSrcweir SbiSymDef* VarDecl( SbiDimList**,sal_Bool,sal_Bool );// Variablen-Deklaration 51cdf0e10cSrcweir SbiProcDef* ProcDecl(sal_Bool bDecl);// Prozedur-Deklaration 52cdf0e10cSrcweir void DefStatic( sal_Bool bPrivate ); 53cdf0e10cSrcweir void DefProc( sal_Bool bStatic, sal_Bool bPrivate ); // Prozedur einlesen 54cdf0e10cSrcweir void DefVar( SbiOpcode eOp, sal_Bool bStatic ); // DIM/REDIM einlesen 55cdf0e10cSrcweir void TypeDecl( SbiSymDef&, sal_Bool bAsNewAlreadyParsed=sal_False ); // AS-Deklaration 56cdf0e10cSrcweir void OpenBlock( SbiToken, SbiExprNode* = NULL ); // Block oeffnen 57cdf0e10cSrcweir void CloseBlock(); // Block aufloesen 58cdf0e10cSrcweir sal_Bool Channel( sal_Bool=sal_False ); // Kanalnummer parsen 59cdf0e10cSrcweir void StmntBlock( SbiToken ); // Statement-Block abarbeiten 60cdf0e10cSrcweir void DefType( sal_Bool bPrivate ); // Parse type declaration 61cdf0e10cSrcweir void DefEnum( sal_Bool bPrivate ); // Parse enum declaration 62cdf0e10cSrcweir void DefDeclare( sal_Bool bPrivate ); 63cdf0e10cSrcweir void EnableCompatibility(); 64cdf0e10cSrcweir public: 65cdf0e10cSrcweir SbxArrayRef rTypeArray; // das Type-Array 66cdf0e10cSrcweir SbxArrayRef rEnumArray; // Enum types 67cdf0e10cSrcweir SbiStringPool aGblStrings; // der String-Pool 68cdf0e10cSrcweir SbiStringPool aLclStrings; // der String-Pool 69cdf0e10cSrcweir SbiSymPool aGlobals; // globale Variable 70cdf0e10cSrcweir SbiSymPool aPublics; // modulglobale Variable 71cdf0e10cSrcweir SbiSymPool aRtlSyms; // Runtime-Library 72cdf0e10cSrcweir SbiCodeGen aGen; // Code-Generator 73cdf0e10cSrcweir StarBASIC* pBasic; // StarBASIC-Instanz 74cdf0e10cSrcweir SbiSymPool* pPool; // aktueller Pool 75cdf0e10cSrcweir SbiExprType eCurExpr; // aktueller Expr-Typ 76cdf0e10cSrcweir short nBase; // OPTION BASE-Wert 77cdf0e10cSrcweir sal_Bool bText; // OPTION COMPARE TEXT 78cdf0e10cSrcweir sal_Bool bExplicit; // sal_True: OPTION EXPLICIT 79cdf0e10cSrcweir sal_Bool bClassModule; // sal_True: OPTION ClassModule 80cdf0e10cSrcweir StringVector aIfaceVector; // Holds all interfaces implemented by a class module 81cdf0e10cSrcweir StringVector aRequiredTypes; // Types used in Dim As New <type> outside subs 82cdf0e10cSrcweir SbxDataType eDefTypes[26]; // DEFxxx-Datentypen 83cdf0e10cSrcweir 84cdf0e10cSrcweir SbiParser( StarBASIC*, SbModule* ); 85cdf0e10cSrcweir sal_Bool Parse(); // die Aktion 86cdf0e10cSrcweir SbiExprNode* GetWithVar(); // Innerste With-Variable liefern 87cdf0e10cSrcweir 88cdf0e10cSrcweir // AB 31.3.1996, Symbol in Runtime-Library suchen 89cdf0e10cSrcweir SbiSymDef* CheckRTLForSym( const String& rSym, SbxDataType eType ); 90cdf0e10cSrcweir void AddConstants( void ); 91cdf0e10cSrcweir 92cdf0e10cSrcweir sal_Bool HasGlobalCode(); // Globaler Code definiert? 93cdf0e10cSrcweir 94cdf0e10cSrcweir sal_Bool TestToken( SbiToken ); // bestimmtes TOken? 95cdf0e10cSrcweir sal_Bool TestSymbol( sal_Bool=sal_False ); // Symbol? 96cdf0e10cSrcweir sal_Bool TestComma(); // Komma oder EOLN? 97cdf0e10cSrcweir void TestEoln(); // EOLN? 98cdf0e10cSrcweir 99cdf0e10cSrcweir void Symbol( const KeywordSymbolInfo* pKeywordSymbolInfo = NULL ); // Let oder Call 100cdf0e10cSrcweir void ErrorStmnt(); // ERROR n 101cdf0e10cSrcweir void NotImp(); // nicht implementiert 102cdf0e10cSrcweir void BadBlock(); // LOOP/WEND/NEXT 103cdf0e10cSrcweir void BadSyntax(); // Falsches SbiToken 104cdf0e10cSrcweir void NoIf(); // ELSE/ELSE IF ohne IF 105cdf0e10cSrcweir void Assign(); // LET 106cdf0e10cSrcweir void Call(); // CALL 107cdf0e10cSrcweir void Close(); // CLOSE 108cdf0e10cSrcweir void Declare(); // DECLARE 109cdf0e10cSrcweir void DefXXX(); // DEFxxx 110cdf0e10cSrcweir void Dim(); // DIM 111cdf0e10cSrcweir void ReDim(); // ReDim(); 112cdf0e10cSrcweir void Erase(); // ERASE 113cdf0e10cSrcweir void Exit(); // EXIT 114cdf0e10cSrcweir void For(); // FOR...NEXT 115cdf0e10cSrcweir void Goto(); // GOTO / GOSUB 116cdf0e10cSrcweir void If(); // IF 117cdf0e10cSrcweir void Implements(); // IMPLEMENTS 118cdf0e10cSrcweir void Input(); // INPUT, INPUT # 119cdf0e10cSrcweir void Line(); // LINE -> LINE INPUT [#] (#i92642) 120cdf0e10cSrcweir void LineInput(); // LINE INPUT, LINE INPUT # 121cdf0e10cSrcweir void LSet(); // LSET 122cdf0e10cSrcweir void Name(); // NAME .. AS .. 123cdf0e10cSrcweir void On(); // ON ERROR/variable 124cdf0e10cSrcweir void OnGoto(); // ON...GOTO / GOSUB 125cdf0e10cSrcweir void Open(); // OPEN 126cdf0e10cSrcweir void Option(); // OPTION 127cdf0e10cSrcweir void Print(); // PRINT, PRINT # 128cdf0e10cSrcweir void SubFunc(); // SUB / FUNCTION 129cdf0e10cSrcweir void Resume(); // RESUME 130cdf0e10cSrcweir void Return(); // RETURN 131cdf0e10cSrcweir void RSet(); // RSET 132cdf0e10cSrcweir void DoLoop(); // DO...LOOP 133cdf0e10cSrcweir void Select(); // SELECT ... CASE 134cdf0e10cSrcweir void Set(); // SET 135cdf0e10cSrcweir void Static(); // STATIC 136cdf0e10cSrcweir void Stop(); // STOP/SYSTEM 137cdf0e10cSrcweir void Type(); // TYPE...AS...END TYPE 138cdf0e10cSrcweir void Enum(); // TYPE...END ENUM 139cdf0e10cSrcweir void While(); // WHILE/WEND 140cdf0e10cSrcweir void With(); // WITH 141cdf0e10cSrcweir void Write(); // WRITE 142cdf0e10cSrcweir }; 143cdf0e10cSrcweir 144cdf0e10cSrcweir 145cdf0e10cSrcweir 146cdf0e10cSrcweir 147cdf0e10cSrcweir 148cdf0e10cSrcweir 149cdf0e10cSrcweir #endif 150