1*78bc99aaSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*78bc99aaSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*78bc99aaSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*78bc99aaSAndrew Rist * distributed with this work for additional information 6*78bc99aaSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*78bc99aaSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*78bc99aaSAndrew Rist * "License"); you may not use this file except in compliance 9*78bc99aaSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*78bc99aaSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*78bc99aaSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*78bc99aaSAndrew Rist * software distributed under the License is distributed on an 15*78bc99aaSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*78bc99aaSAndrew Rist * KIND, either express or implied. See the License for the 17*78bc99aaSAndrew Rist * specific language governing permissions and limitations 18*78bc99aaSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*78bc99aaSAndrew Rist *************************************************************/ 21cdf0e10cSrcweir 22cdf0e10cSrcweir #include <precomp.h> 23cdf0e10cSrcweir #include <s2_luidl/cx_idlco.hxx> 24cdf0e10cSrcweir 25cdf0e10cSrcweir 26cdf0e10cSrcweir // NOT FULLY DECLARED SERVICES 27cdf0e10cSrcweir #include <s2_luidl/cx_sub.hxx> 28cdf0e10cSrcweir #include <s2_dsapi/cx_dsapi.hxx> 29cdf0e10cSrcweir #include <tools/tkpchars.hxx> 30cdf0e10cSrcweir #include <tokens/tkpstam2.hxx> 31cdf0e10cSrcweir #include <s2_luidl/tk_ident.hxx> 32cdf0e10cSrcweir #include <s2_luidl/tk_keyw.hxx> 33cdf0e10cSrcweir #include <s2_luidl/tk_punct.hxx> 34cdf0e10cSrcweir #include <s2_luidl/tokrecv.hxx> 35cdf0e10cSrcweir #include <x_parse2.hxx> 36cdf0e10cSrcweir 37cdf0e10cSrcweir 38cdf0e10cSrcweir namespace csi 39cdf0e10cSrcweir { 40cdf0e10cSrcweir namespace uidl 41cdf0e10cSrcweir { 42cdf0e10cSrcweir 43cdf0e10cSrcweir 44cdf0e10cSrcweir const intt C_nCppInitialNrOfStati = 400; 45cdf0e10cSrcweir const intt C_nStatusSize = 128; 46cdf0e10cSrcweir 47cdf0e10cSrcweir 48cdf0e10cSrcweir 49cdf0e10cSrcweir const uintt nF_fin_Error = 1; 50cdf0e10cSrcweir const uintt nF_fin_Ignore = 2; 51cdf0e10cSrcweir const uintt nF_fin_Identifier = 3; 52cdf0e10cSrcweir const uintt nF_fin_Keyword = 4; 53cdf0e10cSrcweir const uintt nF_fin_Punctuation = 5; 54cdf0e10cSrcweir const uintt nF_fin_EOL = 6; 55cdf0e10cSrcweir const uintt nF_fin_EOF = 7; 56cdf0e10cSrcweir 57cdf0e10cSrcweir const uintt nF_goto_MLDocu = 10; 58cdf0e10cSrcweir const uintt nF_goto_SLDocu = 11; 59cdf0e10cSrcweir const uintt nF_goto_MLComment = 12; 60cdf0e10cSrcweir const uintt nF_goto_SLComment = 13; 61cdf0e10cSrcweir const uintt nF_goto_Praeprocessor = 14; 62cdf0e10cSrcweir const uintt nF_goto_Assignment = 15; 63cdf0e10cSrcweir 64cdf0e10cSrcweir 65cdf0e10cSrcweir 66cdf0e10cSrcweir const UINT16 nTok_bty_any = 100 + TokBuiltInType::bty_any; 67cdf0e10cSrcweir const UINT16 nTok_bty_boolean = 100 + TokBuiltInType::bty_boolean; 68cdf0e10cSrcweir const UINT16 nTok_bty_byte = 100 + TokBuiltInType::bty_byte; 69cdf0e10cSrcweir const UINT16 nTok_bty_char = 100 + TokBuiltInType::bty_char; 70cdf0e10cSrcweir const UINT16 nTok_bty_double = 100 + TokBuiltInType::bty_double; 71cdf0e10cSrcweir const UINT16 nTok_bty_hyper = 100 + TokBuiltInType::bty_hyper; 72cdf0e10cSrcweir const UINT16 nTok_bty_long = 100 + TokBuiltInType::bty_long; 73cdf0e10cSrcweir const UINT16 nTok_bty_short = 100 + TokBuiltInType::bty_short; 74cdf0e10cSrcweir const UINT16 nTok_bty_string = 100 + TokBuiltInType::bty_string; 75cdf0e10cSrcweir const UINT16 nTok_bty_void = 100 + TokBuiltInType::bty_void; 76cdf0e10cSrcweir const UINT16 nTok_bty_ellipse = 100 + TokBuiltInType::bty_ellipse; 77cdf0e10cSrcweir 78cdf0e10cSrcweir const UINT16 nTok_tmod_unsigned = 200 + TokTypeModifier::tmod_unsigned; 79cdf0e10cSrcweir const UINT16 nTok_tmod_sequence = 200 + TokTypeModifier::tmod_sequence; 80cdf0e10cSrcweir 81cdf0e10cSrcweir const UINT16 nTok_ph_in = 250 + TokParameterHandling::ph_in; 82cdf0e10cSrcweir const UINT16 nTok_ph_out = 250 + TokParameterHandling::ph_out; 83cdf0e10cSrcweir const UINT16 nTok_ph_inout = 250 + TokParameterHandling::ph_inout; 84cdf0e10cSrcweir 85cdf0e10cSrcweir const UINT16 nTok_mt_attribute = 300 + TokMetaType::mt_attribute; 86cdf0e10cSrcweir const UINT16 nTok_mt_constants = 300 + TokMetaType::mt_constants; 87cdf0e10cSrcweir const UINT16 nTok_mt_enum = 300 + TokMetaType::mt_enum; 88cdf0e10cSrcweir const UINT16 nTok_mt_exception = 300 + TokMetaType::mt_exception; 89cdf0e10cSrcweir const UINT16 nTok_mt_ident = 300 + TokMetaType::mt_ident; 90cdf0e10cSrcweir const UINT16 nTok_mt_interface = 300 + TokMetaType::mt_interface; 91cdf0e10cSrcweir const UINT16 nTok_mt_module = 300 + TokMetaType::mt_module; 92cdf0e10cSrcweir const UINT16 nTok_mt_property = 300 + TokMetaType::mt_property; 93cdf0e10cSrcweir const UINT16 nTok_mt_service = 300 + TokMetaType::mt_service; 94cdf0e10cSrcweir const UINT16 nTok_mt_singleton = 300 + TokMetaType::mt_singleton; 95cdf0e10cSrcweir const UINT16 nTok_mt_struct = 300 + TokMetaType::mt_struct; 96cdf0e10cSrcweir const UINT16 nTok_mt_typedef = 300 + TokMetaType::mt_typedef; 97cdf0e10cSrcweir const UINT16 nTok_mt_uik = 300 + TokMetaType::mt_uik; 98cdf0e10cSrcweir 99cdf0e10cSrcweir const UINT16 nTok_ste_bound = 400 + TokStereotype::ste_bound; 100cdf0e10cSrcweir const UINT16 nTok_ste_constrained = 400 + TokStereotype::ste_constrained; 101cdf0e10cSrcweir const UINT16 nTok_ste_const = 400 + TokStereotype::ste_const; 102cdf0e10cSrcweir const UINT16 nTok_ste_maybeambiguous = 400 + TokStereotype::ste_maybeambiguous; 103cdf0e10cSrcweir const UINT16 nTok_ste_maybedefault = 400 + TokStereotype::ste_maybedefault; 104cdf0e10cSrcweir const UINT16 nTok_ste_maybevoid = 400 + TokStereotype::ste_maybevoid; 105cdf0e10cSrcweir const UINT16 nTok_ste_oneway = 400 + TokStereotype::ste_oneway; 106cdf0e10cSrcweir const UINT16 nTok_ste_optional = 400 + TokStereotype::ste_optional; 107cdf0e10cSrcweir const UINT16 nTok_ste_readonly = 400 + TokStereotype::ste_readonly; 108cdf0e10cSrcweir const UINT16 nTok_ste_removable = 400 + TokStereotype::ste_removable; 109cdf0e10cSrcweir const UINT16 nTok_ste_virtual = 400 + TokStereotype::ste_virtual; 110cdf0e10cSrcweir const UINT16 nTok_ste_transient = 400 + TokStereotype::ste_transient; 111cdf0e10cSrcweir const UINT16 nTok_ste_published = 400 + TokStereotype::ste_published; 112cdf0e10cSrcweir 113cdf0e10cSrcweir const UINT16 nTok_raises = 501; 114cdf0e10cSrcweir const UINT16 nTok_needs = 502; 115cdf0e10cSrcweir const UINT16 nTok_observes = 503; 116cdf0e10cSrcweir 117cdf0e10cSrcweir const UINT16 nTok_assignment = 550; 118cdf0e10cSrcweir 119cdf0e10cSrcweir const UINT16 nTok_ignore = 600; 120cdf0e10cSrcweir const UINT16 nTok_none_MLCommentBegin = 601; 121cdf0e10cSrcweir const UINT16 nTok_none_SLCommentBegin = 602; 122cdf0e10cSrcweir const UINT16 nTok_none_MLDocuBegin = 603; 123cdf0e10cSrcweir const UINT16 nTok_none_SLDocuBegin = 604; 124cdf0e10cSrcweir const UINT16 nTok_none_PraeprocessorBegin = 605; 125cdf0e10cSrcweir 126cdf0e10cSrcweir 127cdf0e10cSrcweir const UINT16 nTok_punct_BracketOpen = 700 + TokPunctuation::BracketOpen; 128cdf0e10cSrcweir const UINT16 nTok_punct_BracketClose = 700 + TokPunctuation::BracketClose; 129cdf0e10cSrcweir const UINT16 nTok_punct_ArrayBracketOpen = 700 + TokPunctuation::ArrayBracketOpen; 130cdf0e10cSrcweir const UINT16 nTok_punct_ArrayBracketClose = 700 + TokPunctuation::ArrayBracketClose; 131cdf0e10cSrcweir const UINT16 nTok_punct_CurledBracketOpen = 700 + TokPunctuation::CurledBracketOpen; 132cdf0e10cSrcweir const UINT16 nTok_punct_CurledBracketClose = 700 + TokPunctuation::CurledBracketClose; 133cdf0e10cSrcweir const UINT16 nTok_punct_Semicolon = 700 + TokPunctuation::Semicolon; 134cdf0e10cSrcweir const UINT16 nTok_punct_Colon = 700 + TokPunctuation::Colon; 135cdf0e10cSrcweir const UINT16 nTok_punct_DoubleColon = 700 + TokPunctuation::DoubleColon; 136cdf0e10cSrcweir const UINT16 nTok_punct_Comma = 700 + TokPunctuation::Comma; 137cdf0e10cSrcweir const UINT16 nTok_punct_Minus = 700 + TokPunctuation::Minus; 138cdf0e10cSrcweir const UINT16 nTok_punct_Fullstop = 700 + TokPunctuation::Fullstop; 139cdf0e10cSrcweir const UINT16 nTok_punct_Lesser = 700 + TokPunctuation::Lesser; 140cdf0e10cSrcweir const UINT16 nTok_punct_Greater = 700 + TokPunctuation::Greater; 141cdf0e10cSrcweir 142cdf0e10cSrcweir const UINT16 nTok_EOL = 801; 143cdf0e10cSrcweir const UINT16 nTok_EOF = 802; 144cdf0e10cSrcweir 145cdf0e10cSrcweir 146cdf0e10cSrcweir 147cdf0e10cSrcweir Context_UidlCode::Context_UidlCode( Token_Receiver & o_rReceiver, 148cdf0e10cSrcweir DYN TkpDocuContext & let_drContext_Docu ) 149cdf0e10cSrcweir : aStateMachine(C_nStatusSize,C_nCppInitialNrOfStati), 150cdf0e10cSrcweir pReceiver(&o_rReceiver), 151cdf0e10cSrcweir pDocuContext(&let_drContext_Docu), 152cdf0e10cSrcweir dpContext_MLComment(0), 153cdf0e10cSrcweir dpContext_SLComment(0), 154cdf0e10cSrcweir dpContext_Preprocessor(0), 155cdf0e10cSrcweir dpContext_Assignment(0), 156cdf0e10cSrcweir pNewToken(0), 157cdf0e10cSrcweir pFollowUpContext(0) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir dpContext_MLComment = new Context_MLComment(o_rReceiver,*this), 160cdf0e10cSrcweir dpContext_SLComment = new Context_SLComment(o_rReceiver,*this), 161cdf0e10cSrcweir dpContext_Preprocessor = new Context_Praeprocessor(o_rReceiver,*this), 162cdf0e10cSrcweir dpContext_Assignment = new Context_Assignment(o_rReceiver,*this), 163cdf0e10cSrcweir 164cdf0e10cSrcweir pDocuContext->SetParentContext(*this,"*/"); 165cdf0e10cSrcweir SetupStateMachine(); 166cdf0e10cSrcweir } 167cdf0e10cSrcweir 168cdf0e10cSrcweir Context_UidlCode::~Context_UidlCode() 169cdf0e10cSrcweir { 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir void 173cdf0e10cSrcweir Context_UidlCode::ReadCharChain( CharacterSource & io_rText ) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir pNewToken = 0; 176cdf0e10cSrcweir 177cdf0e10cSrcweir UINT16 nTokenId = 0; 178cdf0e10cSrcweir StmBoundsStatu2 & rBound = aStateMachine.GetCharChain(nTokenId, io_rText); 179cdf0e10cSrcweir 180cdf0e10cSrcweir // !!! 181cdf0e10cSrcweir // The order of the next two lines is essential, because 182cdf0e10cSrcweir // pFollowUpContext may be changed by PerformStatusFunction() also, 183cdf0e10cSrcweir // which then MUST override the previous assignment. 184cdf0e10cSrcweir pFollowUpContext = rBound.FollowUpContext(); 185cdf0e10cSrcweir PerformStatusFunction(rBound.StatusFunctionNr(), nTokenId, io_rText); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir 188cdf0e10cSrcweir bool 189cdf0e10cSrcweir Context_UidlCode::PassNewToken() 190cdf0e10cSrcweir { 191cdf0e10cSrcweir if (pNewToken) 192cdf0e10cSrcweir { 193cdf0e10cSrcweir pReceiver->Receive(*pNewToken.Release()); 194cdf0e10cSrcweir return true; 195cdf0e10cSrcweir } 196cdf0e10cSrcweir return false; 197cdf0e10cSrcweir } 198cdf0e10cSrcweir 199cdf0e10cSrcweir TkpContext & 200cdf0e10cSrcweir Context_UidlCode::FollowUpContext() 201cdf0e10cSrcweir { 202cdf0e10cSrcweir csv_assert(pFollowUpContext != 0); 203cdf0e10cSrcweir return *pFollowUpContext; 204cdf0e10cSrcweir } 205cdf0e10cSrcweir 206cdf0e10cSrcweir void 207cdf0e10cSrcweir Context_UidlCode::PerformStatusFunction( uintt i_nStatusSignal, 208cdf0e10cSrcweir UINT16 i_nTokenId, 209cdf0e10cSrcweir CharacterSource & io_rText ) 210cdf0e10cSrcweir { 211cdf0e10cSrcweir switch (i_nStatusSignal) 212cdf0e10cSrcweir { 213cdf0e10cSrcweir case nF_fin_Error: 214cdf0e10cSrcweir // KORR_FUTURE 215cdf0e10cSrcweir throw X_AutodocParser(X_AutodocParser::x_InvalidChar); 216cdf0e10cSrcweir // no break, because of throw 217cdf0e10cSrcweir case nF_fin_Ignore: 218cdf0e10cSrcweir pNewToken = 0; 219cdf0e10cSrcweir io_rText.CutToken(); 220cdf0e10cSrcweir break; 221cdf0e10cSrcweir case nF_fin_Identifier: 222cdf0e10cSrcweir pNewToken = new TokIdentifier(io_rText.CutToken()); 223cdf0e10cSrcweir break; 224cdf0e10cSrcweir case nF_fin_Keyword: 225cdf0e10cSrcweir io_rText.CutToken(); 226cdf0e10cSrcweir switch ( i_nTokenId / 50 ) 227cdf0e10cSrcweir { 228cdf0e10cSrcweir case 2: 229cdf0e10cSrcweir pNewToken = new TokBuiltInType(i_nTokenId - 100); 230cdf0e10cSrcweir break; 231cdf0e10cSrcweir case 4: 232cdf0e10cSrcweir pNewToken = new TokTypeModifier(i_nTokenId - 200); 233cdf0e10cSrcweir break; 234cdf0e10cSrcweir case 5: 235cdf0e10cSrcweir pNewToken = new TokParameterHandling(i_nTokenId - 250); 236cdf0e10cSrcweir break; 237cdf0e10cSrcweir case 6: 238cdf0e10cSrcweir pNewToken = new TokMetaType(i_nTokenId - 300); 239cdf0e10cSrcweir break; 240cdf0e10cSrcweir case 8: 241cdf0e10cSrcweir pNewToken = new TokStereotype(i_nTokenId - 400); 242cdf0e10cSrcweir break; 243cdf0e10cSrcweir case 10: 244cdf0e10cSrcweir switch (i_nTokenId-500) 245cdf0e10cSrcweir { 246cdf0e10cSrcweir case 1: 247cdf0e10cSrcweir pNewToken = new TokRaises; 248cdf0e10cSrcweir break; 249cdf0e10cSrcweir case 2: 250cdf0e10cSrcweir pNewToken = new TokNeeds; 251cdf0e10cSrcweir break; 252cdf0e10cSrcweir case 3: 253cdf0e10cSrcweir pNewToken = new TokObserves; 254cdf0e10cSrcweir break; 255cdf0e10cSrcweir default: 256cdf0e10cSrcweir csv_assert(false); 257cdf0e10cSrcweir } 258cdf0e10cSrcweir break; 259cdf0e10cSrcweir default: 260cdf0e10cSrcweir csv_assert(false); 261cdf0e10cSrcweir } // end switch ( i_nTokenId / 50 ) 262cdf0e10cSrcweir break; 263cdf0e10cSrcweir case nF_fin_Punctuation: 264cdf0e10cSrcweir io_rText.CutToken(); 265cdf0e10cSrcweir if (i_nTokenId == nTok_punct_DoubleColon) 266cdf0e10cSrcweir pNewToken = new TokNameSeparator; 267cdf0e10cSrcweir else 268cdf0e10cSrcweir pNewToken = new TokPunctuation(i_nTokenId - 700); 269cdf0e10cSrcweir break; 270cdf0e10cSrcweir case nF_fin_EOL: 271cdf0e10cSrcweir io_rText.CutToken(); 272cdf0e10cSrcweir pNewToken = new Tok_EOL; 273cdf0e10cSrcweir pReceiver->Increment_CurLine(); 274cdf0e10cSrcweir break; 275cdf0e10cSrcweir case nF_fin_EOF: 276cdf0e10cSrcweir pNewToken = new Tok_EOF; 277cdf0e10cSrcweir break; 278cdf0e10cSrcweir case nF_goto_MLDocu: 279cdf0e10cSrcweir while ( io_rText.CurChar() == '*') 280cdf0e10cSrcweir io_rText.MoveOn(); 281cdf0e10cSrcweir io_rText.CutToken(); 282cdf0e10cSrcweir pDocuContext->SetMode_IsMultiLine(true); 283cdf0e10cSrcweir break; 284cdf0e10cSrcweir case nF_goto_SLDocu: 285cdf0e10cSrcweir io_rText.CutToken(); 286cdf0e10cSrcweir pDocuContext->SetMode_IsMultiLine(false); 287cdf0e10cSrcweir break; 288cdf0e10cSrcweir case nF_goto_MLComment: 289cdf0e10cSrcweir break; 290cdf0e10cSrcweir case nF_goto_SLComment: 291cdf0e10cSrcweir break; 292cdf0e10cSrcweir case nF_goto_Praeprocessor: 293cdf0e10cSrcweir break; 294cdf0e10cSrcweir case nF_goto_Assignment: 295cdf0e10cSrcweir break; 296cdf0e10cSrcweir default: 297cdf0e10cSrcweir csv_assert(false); 298cdf0e10cSrcweir } // end switch (i_nStatusSignal) 299cdf0e10cSrcweir } 300cdf0e10cSrcweir 301cdf0e10cSrcweir void 302cdf0e10cSrcweir Context_UidlCode::SetupStateMachine() 303cdf0e10cSrcweir { 304cdf0e10cSrcweir // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel): 305cdf0e10cSrcweir // const INT16 top = 0; // Top-Status 306cdf0e10cSrcweir const INT16 wht = 1; // Whitespace-�berlese-Status 307cdf0e10cSrcweir const INT16 bez = 2; // Bezeichner-lese-Status 308cdf0e10cSrcweir 309cdf0e10cSrcweir // Tokenfinish-Stati: 310cdf0e10cSrcweir const INT16 finErr = 3; 311cdf0e10cSrcweir const INT16 finIgn = 4; 312cdf0e10cSrcweir const INT16 finBez = 5; 313cdf0e10cSrcweir const INT16 finKeyw = 6; 314cdf0e10cSrcweir const INT16 finPunct = 7; 315cdf0e10cSrcweir const INT16 finEOL = 8; 316cdf0e10cSrcweir const INT16 finEOF = 9; 317cdf0e10cSrcweir 318cdf0e10cSrcweir // Kontextwechsel-Stati: 319cdf0e10cSrcweir const INT16 gotoMld = 10; 320cdf0e10cSrcweir const INT16 gotoSld = 11; 321cdf0e10cSrcweir const INT16 gotoMlc = 12; 322cdf0e10cSrcweir const INT16 gotoSlc = 13; 323cdf0e10cSrcweir const INT16 gotoPrp = 14; 324cdf0e10cSrcweir const INT16 gotoAsg = 15; 325cdf0e10cSrcweir 326cdf0e10cSrcweir // Konstanten zur Benutzung in der Tabelle: 327cdf0e10cSrcweir const INT16 err = finErr; 328cdf0e10cSrcweir const INT16 fbz = finBez; 329cdf0e10cSrcweir const INT16 fig = finIgn; 330cdf0e10cSrcweir const INT16 fof = finEOF; 331cdf0e10cSrcweir // const INT16 fkw = finKeyw; 332cdf0e10cSrcweir // const INT16 fpc = finPunct; 333cdf0e10cSrcweir 334cdf0e10cSrcweir /// Die '0'en werden spaeter durch AddToken() ersetzt. 335cdf0e10cSrcweir 336cdf0e10cSrcweir const INT16 A_nTopStatus[C_nStatusSize] = 337cdf0e10cSrcweir // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 338cdf0e10cSrcweir {fof,err,err,err,err,err,err,err,err,wht, 0,wht,wht, 0,err,err, 339cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ... 340cdf0e10cSrcweir wht,err,wht, 0,err,err,err,err, 0, 0,err,err, 0, 0, 0,err, 341cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,err,err,err,err,err,err, // 48 ... 342cdf0e10cSrcweir err,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 343cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0,err, 0,err,bez, // 80 ... 344cdf0e10cSrcweir err,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 345cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0,err, 0,err,err, // 112 ... 346cdf0e10cSrcweir }; 347cdf0e10cSrcweir 348cdf0e10cSrcweir const INT16 A_nWhitespaceStatus[C_nStatusSize] = 349cdf0e10cSrcweir // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 350cdf0e10cSrcweir {fof,err,err,err,err,err,err,err,err,wht,fig,wht,wht,fig,err,err, 351cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ... 352cdf0e10cSrcweir wht,fig,wht,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, 353cdf0e10cSrcweir fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 48 ... 354cdf0e10cSrcweir fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, 355cdf0e10cSrcweir fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 80 ... 356cdf0e10cSrcweir fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, 357cdf0e10cSrcweir fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,err // 112 ... 358cdf0e10cSrcweir }; 359cdf0e10cSrcweir 360cdf0e10cSrcweir const INT16 A_nBezeichnerStatus[C_nStatusSize] = 361cdf0e10cSrcweir // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 362cdf0e10cSrcweir {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err, 363cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ... 364cdf0e10cSrcweir fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz, 365cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ... 366cdf0e10cSrcweir fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 367cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ... 368cdf0e10cSrcweir fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 369cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err // 112 ... 370cdf0e10cSrcweir }; 371cdf0e10cSrcweir 372cdf0e10cSrcweir const INT16 A_nPunctDefStatus[C_nStatusSize] = 373cdf0e10cSrcweir // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 374cdf0e10cSrcweir {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 375cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ... 376cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 377cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ... 378cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 379cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ... 380cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 381cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err // 112 ... 382cdf0e10cSrcweir }; 383cdf0e10cSrcweir 384cdf0e10cSrcweir const INT16 A_nKeywordDefStatus[C_nStatusSize] = 385cdf0e10cSrcweir // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 386cdf0e10cSrcweir {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err, 387cdf0e10cSrcweir err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ... 388cdf0e10cSrcweir fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz, 389cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ... 390cdf0e10cSrcweir fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 391cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ... 392cdf0e10cSrcweir fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 393cdf0e10cSrcweir bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err // 112 ... 394cdf0e10cSrcweir }; 395cdf0e10cSrcweir 396cdf0e10cSrcweir DYN StmArrayStatu2 * dpStatusTop 397cdf0e10cSrcweir = new StmArrayStatu2( C_nStatusSize, A_nTopStatus, 0, true); 398cdf0e10cSrcweir DYN StmArrayStatu2 * dpStatusWhite 399cdf0e10cSrcweir = new StmArrayStatu2( C_nStatusSize, A_nWhitespaceStatus, 0, true); 400cdf0e10cSrcweir DYN StmArrayStatu2 * dpStatusBez 401cdf0e10cSrcweir = new StmArrayStatu2( C_nStatusSize, A_nBezeichnerStatus, 0, true); 402cdf0e10cSrcweir 403cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_finErr 404cdf0e10cSrcweir = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_Error, true ); 405cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_finIgn 406cdf0e10cSrcweir = new StmBoundsStatu2( *this, *this, nF_fin_Ignore, true ); 407cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_finBez 408cdf0e10cSrcweir = new StmBoundsStatu2( *this, *this, nF_fin_Identifier, true ); 409cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_finKeyw 410cdf0e10cSrcweir = new StmBoundsStatu2( *this, *this, nF_fin_Keyword, false ); 411cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_finPunct 412cdf0e10cSrcweir = new StmBoundsStatu2( *this, *this, nF_fin_Punctuation, false ); 413cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_finEOL 414cdf0e10cSrcweir = new StmBoundsStatu2( *this, *this, nF_fin_EOL, false ); 415cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_finEOF 416cdf0e10cSrcweir = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_EOF, false ); 417cdf0e10cSrcweir 418cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_gotoMld 419cdf0e10cSrcweir = new StmBoundsStatu2( *this, *pDocuContext, nF_goto_MLDocu, false ); 420cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_gotoSld 421cdf0e10cSrcweir = new StmBoundsStatu2( *this, *pDocuContext, nF_goto_SLDocu, false ); 422cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_gotoMlc 423cdf0e10cSrcweir = new StmBoundsStatu2( *this, *dpContext_MLComment, nF_goto_MLComment, false ); 424cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_gotoSlc 425cdf0e10cSrcweir = new StmBoundsStatu2( *this, *dpContext_SLComment, nF_goto_SLComment, false ); 426cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_gotoPrp 427cdf0e10cSrcweir = new StmBoundsStatu2( *this, *dpContext_Preprocessor, nF_goto_Praeprocessor, false ); 428cdf0e10cSrcweir DYN StmBoundsStatu2 * dpBst_gotoAsg 429cdf0e10cSrcweir = new StmBoundsStatu2( *this, *dpContext_Assignment, nF_goto_Assignment, false ); 430cdf0e10cSrcweir 431cdf0e10cSrcweir // dpMain aufbauen: 432cdf0e10cSrcweir aStateMachine.AddStatus(dpStatusTop); 433cdf0e10cSrcweir 434cdf0e10cSrcweir aStateMachine.AddStatus(dpStatusWhite); 435cdf0e10cSrcweir aStateMachine.AddStatus(dpStatusBez); 436cdf0e10cSrcweir 437cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_finErr); 438cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_finIgn); 439cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_finBez); 440cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_finKeyw); 441cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_finPunct); 442cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_finEOL); 443cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_finEOF); 444cdf0e10cSrcweir 445cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_gotoMld); 446cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_gotoSld); 447cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_gotoMlc); 448cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_gotoSlc); 449cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_gotoPrp); 450cdf0e10cSrcweir aStateMachine.AddStatus(dpBst_gotoAsg); 451cdf0e10cSrcweir 452cdf0e10cSrcweir aStateMachine.AddToken("any", nTok_bty_any, A_nKeywordDefStatus, finKeyw); 453cdf0e10cSrcweir aStateMachine.AddToken("attribute", nTok_mt_attribute, A_nKeywordDefStatus, finKeyw); 454cdf0e10cSrcweir aStateMachine.AddToken("boolean", nTok_bty_boolean, A_nKeywordDefStatus, finKeyw); 455cdf0e10cSrcweir aStateMachine.AddToken("bound", nTok_ste_bound, A_nKeywordDefStatus, finKeyw); 456cdf0e10cSrcweir aStateMachine.AddToken("byte", nTok_bty_byte, A_nKeywordDefStatus, finKeyw); 457cdf0e10cSrcweir aStateMachine.AddToken("char", nTok_bty_char, A_nKeywordDefStatus, finKeyw); 458cdf0e10cSrcweir aStateMachine.AddToken("const", nTok_ste_const, A_nKeywordDefStatus, finKeyw); 459cdf0e10cSrcweir aStateMachine.AddToken("constants", nTok_mt_constants, A_nKeywordDefStatus, finKeyw); 460cdf0e10cSrcweir aStateMachine.AddToken("constrained", 461cdf0e10cSrcweir nTok_ste_constrained, A_nKeywordDefStatus, finKeyw); 462cdf0e10cSrcweir aStateMachine.AddToken("double", nTok_bty_double, A_nKeywordDefStatus, finKeyw); 463cdf0e10cSrcweir aStateMachine.AddToken("enum", nTok_mt_enum, A_nKeywordDefStatus, finKeyw); 464cdf0e10cSrcweir aStateMachine.AddToken("exception", nTok_mt_exception, A_nKeywordDefStatus, finKeyw); 465cdf0e10cSrcweir aStateMachine.AddToken("hyper", nTok_bty_hyper, A_nKeywordDefStatus, finKeyw); 466cdf0e10cSrcweir aStateMachine.AddToken("ident", nTok_mt_ident, A_nKeywordDefStatus, finKeyw); 467cdf0e10cSrcweir aStateMachine.AddToken("in", nTok_ph_in, A_nKeywordDefStatus, finKeyw); 468cdf0e10cSrcweir aStateMachine.AddToken("inout", nTok_ph_inout, A_nKeywordDefStatus, finKeyw); 469cdf0e10cSrcweir aStateMachine.AddToken("interface", nTok_mt_interface, A_nKeywordDefStatus, finKeyw); 470cdf0e10cSrcweir aStateMachine.AddToken("long", nTok_bty_long, A_nKeywordDefStatus, finKeyw); 471cdf0e10cSrcweir aStateMachine.AddToken("maybeambiguous", 472cdf0e10cSrcweir nTok_ste_maybeambiguous,A_nKeywordDefStatus, finKeyw); 473cdf0e10cSrcweir aStateMachine.AddToken("maybedefault", 474cdf0e10cSrcweir nTok_ste_maybedefault, A_nKeywordDefStatus, finKeyw); 475cdf0e10cSrcweir aStateMachine.AddToken("maybevoid", nTok_ste_maybevoid, A_nKeywordDefStatus, finKeyw); 476cdf0e10cSrcweir aStateMachine.AddToken("module", nTok_mt_module, A_nKeywordDefStatus, finKeyw); 477cdf0e10cSrcweir aStateMachine.AddToken("needs", nTok_needs, A_nKeywordDefStatus, finKeyw); 478cdf0e10cSrcweir aStateMachine.AddToken("observes", nTok_observes, A_nKeywordDefStatus, finKeyw); 479cdf0e10cSrcweir aStateMachine.AddToken("oneway", nTok_ste_oneway, A_nKeywordDefStatus, finKeyw); 480cdf0e10cSrcweir aStateMachine.AddToken("optional", nTok_ste_optional, A_nKeywordDefStatus, finKeyw); 481cdf0e10cSrcweir aStateMachine.AddToken("out", nTok_ph_out, A_nKeywordDefStatus, finKeyw); 482cdf0e10cSrcweir aStateMachine.AddToken("property", nTok_mt_property, A_nKeywordDefStatus, finKeyw); 483cdf0e10cSrcweir aStateMachine.AddToken("published", nTok_ste_published, A_nKeywordDefStatus, finKeyw); 484cdf0e10cSrcweir aStateMachine.AddToken("raises", nTok_raises, A_nKeywordDefStatus, finKeyw); 485cdf0e10cSrcweir aStateMachine.AddToken("readonly", nTok_ste_readonly, A_nKeywordDefStatus, finKeyw); 486cdf0e10cSrcweir aStateMachine.AddToken("removable", nTok_ste_removable, A_nKeywordDefStatus, finKeyw); 487cdf0e10cSrcweir aStateMachine.AddToken("sequence", nTok_tmod_sequence, A_nKeywordDefStatus, finKeyw); 488cdf0e10cSrcweir aStateMachine.AddToken("service", nTok_mt_service, A_nKeywordDefStatus, finKeyw); 489cdf0e10cSrcweir aStateMachine.AddToken("short", nTok_bty_short, A_nKeywordDefStatus, finKeyw); 490cdf0e10cSrcweir aStateMachine.AddToken("singleton", nTok_mt_singleton, A_nKeywordDefStatus, finKeyw); 491cdf0e10cSrcweir aStateMachine.AddToken("string", nTok_bty_string, A_nKeywordDefStatus, finKeyw); 492cdf0e10cSrcweir aStateMachine.AddToken("struct", nTok_mt_struct, A_nKeywordDefStatus, finKeyw); 493cdf0e10cSrcweir aStateMachine.AddToken("transient", nTok_ste_transient, A_nKeywordDefStatus, finKeyw); 494cdf0e10cSrcweir aStateMachine.AddToken("typedef", nTok_mt_typedef, A_nKeywordDefStatus, finKeyw); 495cdf0e10cSrcweir aStateMachine.AddToken("uik", nTok_mt_uik, A_nKeywordDefStatus, finKeyw); 496cdf0e10cSrcweir aStateMachine.AddToken("unsigned", nTok_tmod_unsigned, A_nKeywordDefStatus, finKeyw); 497cdf0e10cSrcweir aStateMachine.AddToken("virtual", nTok_ste_virtual, A_nKeywordDefStatus, finKeyw); 498cdf0e10cSrcweir aStateMachine.AddToken("void", nTok_bty_void, A_nKeywordDefStatus, finKeyw); 499cdf0e10cSrcweir aStateMachine.AddToken("...", nTok_bty_ellipse, A_nPunctDefStatus, finKeyw); 500cdf0e10cSrcweir 501cdf0e10cSrcweir aStateMachine.AddToken("=", nTok_assignment, A_nPunctDefStatus, gotoAsg); 502cdf0e10cSrcweir 503cdf0e10cSrcweir aStateMachine.AddToken("(", nTok_punct_BracketOpen, A_nPunctDefStatus, finPunct); 504cdf0e10cSrcweir aStateMachine.AddToken(")", nTok_punct_BracketClose,A_nPunctDefStatus, finPunct); 505cdf0e10cSrcweir aStateMachine.AddToken("[", nTok_punct_ArrayBracketOpen, 506cdf0e10cSrcweir A_nPunctDefStatus, finIgn); 507cdf0e10cSrcweir aStateMachine.AddToken("]", nTok_punct_ArrayBracketClose, 508cdf0e10cSrcweir A_nPunctDefStatus, finIgn); 509cdf0e10cSrcweir aStateMachine.AddToken("{", nTok_punct_CurledBracketOpen, 510cdf0e10cSrcweir A_nPunctDefStatus, finPunct); 511cdf0e10cSrcweir aStateMachine.AddToken("}", nTok_punct_CurledBracketClose, 512cdf0e10cSrcweir A_nPunctDefStatus, finPunct); 513cdf0e10cSrcweir aStateMachine.AddToken("<", nTok_punct_Lesser, A_nPunctDefStatus, finPunct); 514cdf0e10cSrcweir aStateMachine.AddToken(">", nTok_punct_Greater, A_nPunctDefStatus, finPunct); 515cdf0e10cSrcweir aStateMachine.AddToken(";", nTok_punct_Semicolon, A_nPunctDefStatus, finPunct); 516cdf0e10cSrcweir aStateMachine.AddToken(":", nTok_punct_Colon, A_nPunctDefStatus, finPunct); 517cdf0e10cSrcweir aStateMachine.AddToken("::", nTok_punct_DoubleColon, A_nPunctDefStatus, finPunct); 518cdf0e10cSrcweir aStateMachine.AddToken(",", nTok_punct_Comma, A_nPunctDefStatus, finPunct); 519cdf0e10cSrcweir aStateMachine.AddToken("-", nTok_punct_Minus, A_nPunctDefStatus, finPunct); 520cdf0e10cSrcweir aStateMachine.AddToken(".", nTok_punct_Fullstop, A_nPunctDefStatus, finPunct); 521cdf0e10cSrcweir aStateMachine.AddToken("/**", nTok_none_MLDocuBegin, A_nPunctDefStatus, gotoMld); 522cdf0e10cSrcweir aStateMachine.AddToken("///", nTok_none_SLDocuBegin, A_nPunctDefStatus, gotoSld); 523cdf0e10cSrcweir aStateMachine.AddToken("/*", nTok_none_MLCommentBegin, 524cdf0e10cSrcweir A_nPunctDefStatus, gotoMlc); 525cdf0e10cSrcweir aStateMachine.AddToken("//", nTok_none_SLCommentBegin, 526cdf0e10cSrcweir A_nPunctDefStatus, gotoSlc); 527cdf0e10cSrcweir aStateMachine.AddToken("/**/", nTok_ignore, A_nPunctDefStatus, finIgn); 528cdf0e10cSrcweir aStateMachine.AddToken("#", nTok_none_PraeprocessorBegin, 529cdf0e10cSrcweir A_nPunctDefStatus, gotoPrp); 530cdf0e10cSrcweir aStateMachine.AddToken("\r\n", nTok_EOL, A_nPunctDefStatus, finEOL); 531cdf0e10cSrcweir aStateMachine.AddToken("\r", nTok_EOL, A_nPunctDefStatus, finEOL); 532cdf0e10cSrcweir aStateMachine.AddToken("\n", nTok_EOL, A_nPunctDefStatus, finEOL); 533cdf0e10cSrcweir aStateMachine.AddToken("\n\r", nTok_EOL, A_nPunctDefStatus, finEOL); 534cdf0e10cSrcweir }; 535cdf0e10cSrcweir 536cdf0e10cSrcweir 537cdf0e10cSrcweir } // namespace uidl 538cdf0e10cSrcweir } // namespace csi 539cdf0e10cSrcweir 540