1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #include <precomp.h> 29 #include "cx_c_std.hxx" 30 31 32 // NOT FULLY DECLARED SERVICES 33 #include "all_toks.hxx" 34 #include "cx_c_pp.hxx" 35 #include "cx_c_sub.hxx" 36 #include <tools/tkpchars.hxx> 37 #include <tokens/tkpstama.hxx> 38 #include <x_parse.hxx> 39 #include "c_dealer.hxx" 40 41 42 namespace cpp { 43 44 45 const intt C_nCppInitialNrOfStati = 600; 46 const intt C_nStatusSize = 128; 47 48 49 50 const uintt nF_fin_Error = 1; 51 const uintt nF_fin_CreateWithoutText = 2; 52 const uintt nF_fin_CreateWithText = 3; 53 const uintt nF_fin_Ignore = 4; 54 const uintt nF_fin_EOL = 5; 55 const uintt nF_fin_EOF = 6; 56 const uintt nF_fin_Bezeichner = 7; 57 58 const uintt nF_goto_Preprocessor = 10; 59 const uintt nF_goto_Comment = 11; 60 const uintt nF_goto_Docu = 12; 61 const uintt nF_goto_Const = 13; 62 const uintt nF_goto_UnblockMacro = 14; 63 64 // Token create functions for the state machine: 65 DYN TextToken * TCF_Identifier(const char * text) { return new Tok_Identifier(text); } 66 67 DYN TextToken * TCF_operator(const char *) { return new Tok_operator; } 68 DYN TextToken * TCF_class(const char *) { return new Tok_class; } 69 DYN TextToken * TCF_struct(const char *) { return new Tok_struct; } 70 DYN TextToken * TCF_union(const char *) { return new Tok_union; } 71 DYN TextToken * TCF_enum(const char *) { return new Tok_enum; } 72 DYN TextToken * TCF_typedef(const char *) { return new Tok_typedef; } 73 DYN TextToken * TCF_public(const char *) { return new Tok_public; } 74 DYN TextToken * TCF_protected(const char *) { return new Tok_protected; } 75 DYN TextToken * TCF_private(const char *) { return new Tok_private; } 76 DYN TextToken * TCF_template(const char *) { return new Tok_template; } 77 DYN TextToken * TCF_virtual(const char *) { return new Tok_virtual; } 78 DYN TextToken * TCF_friend(const char *) { return new Tok_friend; } 79 DYN TextToken * TCF_Tilde(const char *) { return new Tok_Tilde; } 80 DYN TextToken * TCF_const(const char *) { return new Tok_const; } 81 DYN TextToken * TCF_volatile(const char *) { return new Tok_volatile; } 82 DYN TextToken * TCF_extern(const char *) { return new Tok_extern; } 83 DYN TextToken * TCF_static(const char *) { return new Tok_static; } 84 DYN TextToken * TCF_mutable(const char *) { return new Tok_mutable; } 85 DYN TextToken * TCF_register(const char *) { return new Tok_register; } 86 DYN TextToken * TCF_inline(const char *) { return new Tok_inline; } 87 DYN TextToken * TCF_explicit(const char *) { return new Tok_explicit; } 88 DYN TextToken * TCF_namespace(const char *) { return new Tok_namespace; } 89 DYN TextToken * TCF_using(const char *) { return new Tok_using; } 90 DYN TextToken * TCF_throw(const char *) { return new Tok_throw; } 91 DYN TextToken * TCF_SwBracketOpen(const char *) { return new Tok_SwBracket_Left; } 92 DYN TextToken * TCF_SwBracketClose(const char *) { return new Tok_SwBracket_Right; } 93 DYN TextToken * TCF_ArBracketOpen(const char *) { return new Tok_ArrayBracket_Left; } 94 DYN TextToken * TCF_ArBracketClose(const char *) { return new Tok_ArrayBracket_Right; } 95 DYN TextToken * TCF_BracketOpen(const char *) { return new Tok_Bracket_Left; } 96 DYN TextToken * TCF_BracketClose(const char *) { return new Tok_Bracket_Right; } 97 DYN TextToken * TCF_DblColon(const char *) { return new Tok_DoubleColon; } 98 DYN TextToken * TCF_Semikolon(const char *) { return new Tok_Semicolon; } 99 DYN TextToken * TCF_Komma(const char *) { return new Tok_Comma; } 100 DYN TextToken * TCF_Colon(const char *) { return new Tok_Colon; } 101 DYN TextToken * TCF_Zuweisung(const char *) { return new Tok_Assign; } 102 DYN TextToken * TCF_Smaller(const char *) { return new Tok_Less; } 103 DYN TextToken * TCF_Bigger(const char *) { return new Tok_Greater; } 104 DYN TextToken * TCF_Stern(const char *) { return new Tok_Asterix; } 105 DYN TextToken * TCF_Ampersand(const char *) { return new Tok_AmpersAnd; } 106 DYN TextToken * TCF_Ellipse(const char *) { return new Tok_Ellipse; } 107 DYN TextToken * TCF_typename(const char *) { return new Tok_typename; } 108 109 // Operators 110 DYN TextToken * TCF_Operator(const char * text) { return new Tok_Operator(text); } 111 112 DYN TextToken * TCF_BuiltInType(const char * text) { return new Tok_BuiltInType(text); } 113 DYN TextToken * TCF_TypeModifier(const char * text) { return new Tok_TypeSpecializer(text); } 114 115 DYN TextToken * TCF_Eof(const char *) { return new Tok_Eof; } 116 117 118 119 Context_CppStd::Context_CppStd( DYN autodoc::TkpDocuContext & let_drContext_Docu ) 120 : Cx_Base(0), 121 aStateMachine(C_nStatusSize,C_nCppInitialNrOfStati), 122 pDocuContext(&let_drContext_Docu), 123 pContext_Comment(0), 124 pContext_Preprocessor(0), 125 pContext_ConstString(0), 126 pContext_ConstChar(0), 127 pContext_ConstNumeric(0), 128 pContext_UnblockMacro(0) 129 { 130 pDocuContext->SetParentContext(*this,"*/"); 131 132 pContext_Comment = new Context_Comment(*this); 133 pContext_Preprocessor = new Context_Preprocessor(*this); 134 pContext_ConstString = new Context_ConstString(*this); 135 pContext_ConstChar = new Context_ConstChar(*this); 136 pContext_ConstNumeric = new Context_ConstNumeric(*this); 137 pContext_UnblockMacro = new Context_UnblockMacro(*this); 138 139 SetupStateMachine(); 140 } 141 142 Context_CppStd::~Context_CppStd() 143 { 144 } 145 146 void 147 Context_CppStd::ReadCharChain( CharacterSource & io_rText ) 148 { 149 SetNewToken(0); 150 151 TextToken::F_CRTOK fTokenCreateFunction = 0; 152 StmBoundsStatus & rBound = aStateMachine.GetCharChain(fTokenCreateFunction, io_rText); 153 154 // !!! 155 // The order of the next two lines is essential, because 156 // pFollowUpContext may be changed by PerformStatusFunction() also, 157 // which then MUST override the previous assignment. 158 SetFollowUpContext(rBound.FollowUpContext()); 159 PerformStatusFunction(rBound.StatusFunctionNr(), fTokenCreateFunction, io_rText); 160 } 161 162 void 163 Context_CppStd::AssignDealer( Distributor & o_rDealer ) 164 { 165 Cx_Base::AssignDealer(o_rDealer); 166 167 pDocuContext->AssignDealer(o_rDealer); 168 pContext_Comment->AssignDealer(o_rDealer); 169 pContext_Preprocessor->AssignDealer(o_rDealer); 170 pContext_ConstString->AssignDealer(o_rDealer); 171 pContext_ConstChar->AssignDealer(o_rDealer); 172 pContext_ConstNumeric->AssignDealer(o_rDealer); 173 pContext_UnblockMacro->AssignDealer(o_rDealer); 174 } 175 176 void 177 Context_CppStd::PerformStatusFunction( uintt i_nStatusSignal, 178 F_CRTOK i_fTokenCreateFunction, 179 CharacterSource & io_rText ) 180 { 181 switch (i_nStatusSignal) 182 { 183 case nF_fin_CreateWithoutText: 184 io_rText.CutToken(); 185 csv_assert(i_fTokenCreateFunction != 0); 186 SetNewToken( (*i_fTokenCreateFunction)(0) ); 187 break; 188 case nF_fin_CreateWithText: 189 csv_assert(i_fTokenCreateFunction != 0); 190 SetNewToken( (*i_fTokenCreateFunction)(io_rText.CutToken()) ); 191 break; 192 case nF_fin_Ignore: 193 io_rText.CutToken(); 194 SetNewToken(0); 195 break; 196 case nF_fin_EOL: 197 io_rText.CutToken(); 198 SetNewToken(0); 199 Dealer().Deal_Eol(); 200 break; 201 case nF_fin_EOF: 202 io_rText.CutToken(); 203 SetNewToken( TCF_Eof(0) ); 204 break; 205 case nF_fin_Bezeichner: 206 SetNewToken( TCF_Identifier(io_rText.CutToken()) ); 207 break; 208 209 case nF_goto_Preprocessor: 210 io_rText.CutToken(); 211 SetNewToken(0); 212 break; 213 case nF_goto_Comment: 214 SetNewToken(0); 215 pContext_Comment->SetMode_IsMultiLine( io_rText.CutToken()[1] == '*' ); 216 break; 217 case nF_goto_Docu: 218 SetNewToken(0); 219 pDocuContext->SetMode_IsMultiLine( io_rText.CutToken()[1] == '*' ); 220 break; 221 case nF_goto_Const: 222 SetNewToken(0); 223 break; 224 case nF_goto_UnblockMacro: 225 SetNewToken(0); 226 break; 227 228 case nF_fin_Error: 229 default: 230 { 231 char cCC = io_rText.CurChar(); 232 String sCurChar( &cCC, 1 ); 233 throw X_Parser( X_Parser::x_InvalidChar, sCurChar, String::Null_(), 0 ); 234 } 235 } // end switch (i_nStatusSignal) 236 } 237 238 void 239 Context_CppStd::SetupStateMachine() 240 { 241 // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel): 242 // const INT16 top = 0; // Top-Status 243 const INT16 wht = 1; // Whitespace-�berlese-Status 244 const INT16 bez = 2; // Bezeichner-lese-Status 245 246 // Tokenfinish-Stati: 247 const INT16 finError = 3; 248 const INT16 finIgnore = 4; 249 const INT16 finBezeichner = 5; 250 const INT16 finKeyword = 6; 251 const INT16 finPunctuation = 7; 252 const INT16 finBiType = 8; 253 const INT16 finTypeModifier = 9; 254 const INT16 finEOL = 10; 255 const INT16 finEOF = 11; 256 257 // Kontextwechsel-Stati: 258 const INT16 gotoComment = 12; 259 const INT16 gotoDocu = 13; 260 const INT16 gotoPreprocessor = 14; 261 const INT16 gotoConstString = 15; 262 const INT16 gotoConstChar = 16; 263 const INT16 gotoConstNumeric = 17; 264 const INT16 gotoUnblockMacro = 18; 265 266 // Abbreviations to be used in status tables: 267 const INT16 err = finError; 268 const INT16 fig = finIgnore; 269 const INT16 fbz = finBezeichner; 270 const INT16 fof = finEOF; 271 const INT16 cst = gotoConstString; 272 const INT16 cch = gotoConstChar; 273 const INT16 cnr = gotoConstNumeric; 274 275 276 /// Zeros - '0' - will be replaced by AddToken(). 277 278 const INT16 A_nTopStatus[C_nStatusSize] = 279 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 280 {fof,err,err,err,err,err,err,err,err,wht, 0,wht,wht, 0,err,err, 281 err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ... 282 wht, 0,cst, 0,err, 0, 0,cch, 0, 0, 0, 0, 0, 0, 0, 0, 283 cnr,cnr,cnr,cnr,cnr,cnr,cnr,cnr,cnr,cnr, 0, 0, 0, 0, 0, 0, // 48 ... 284 0,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 285 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0, 0, 0, 0,bez, // 80 ... 286 0,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 287 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 0, 0, 0, 0,err, // 80 ... 288 }; 289 290 const INT16 A_nWhitespaceStatus[C_nStatusSize] = 291 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 292 {fof,err,err,err,err,err,err,err,err,wht,fig,wht,wht,fig,err,err, 293 err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ... 294 wht,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, 295 fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 48 ... 296 fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, 297 fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 80 ... 298 fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, 299 fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,err 300 }; 301 302 const INT16 A_nBezeichnerStatus[C_nStatusSize] = 303 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 304 {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err, 305 err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ... 306 fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz, 307 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ... 308 fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 309 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ... 310 fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 311 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err 312 }; 313 314 315 const INT16 A_nOperatorDefStatus[C_nStatusSize] = 316 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 317 {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 318 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ... 319 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 320 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ... 321 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 322 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ... 323 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, 324 err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err 325 }; 326 327 const INT16 A_nBezDefStatus[C_nStatusSize] = 328 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 329 {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err, 330 err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ... 331 fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz, 332 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ... 333 fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 334 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ... 335 fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez, 336 bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err 337 }; 338 339 DYN StmArrayStatus * dpStatusTop 340 = new StmArrayStatus( C_nStatusSize, A_nTopStatus, 0, true); 341 DYN StmArrayStatus * dpStatusWhite 342 = new StmArrayStatus( C_nStatusSize, A_nWhitespaceStatus, 0, true); 343 DYN StmArrayStatus * dpStatusBez 344 = new StmArrayStatus( C_nStatusSize, A_nBezeichnerStatus, TCF_Identifier, true); 345 346 DYN StmBoundsStatus * dpBst_finError 347 = new StmBoundsStatus( *this, TkpContext::Null_(), nF_fin_Error, true ); 348 DYN StmBoundsStatus * dpBst_finIgnore 349 = new StmBoundsStatus( *this, *this, nF_fin_Ignore, true ); 350 DYN StmBoundsStatus * dpBst_finBezeichner 351 = new StmBoundsStatus( *this, *this, nF_fin_Bezeichner, true ); 352 DYN StmBoundsStatus * dpBst_finKeyword 353 = new StmBoundsStatus( *this, *this, nF_fin_CreateWithoutText, false ); 354 DYN StmBoundsStatus * dpBst_finPunctuation 355 = new StmBoundsStatus( *this, *this, nF_fin_CreateWithText, false ); 356 DYN StmBoundsStatus * dpBst_finBiType 357 = new StmBoundsStatus( *this, *this, nF_fin_CreateWithText, false ); 358 DYN StmBoundsStatus * dpBst_finTypeModifier 359 = new StmBoundsStatus( *this, *this, nF_fin_CreateWithText, false ); 360 DYN StmBoundsStatus * dpBst_finEOL 361 = new StmBoundsStatus( *this, *this, nF_fin_EOL, false ); 362 DYN StmBoundsStatus * dpBst_finEOF 363 = new StmBoundsStatus( *this, TkpContext::Null_(), nF_fin_EOF, false ); 364 365 DYN StmBoundsStatus * dpBst_gotoComment 366 = new StmBoundsStatus( *this, *pContext_Comment, nF_goto_Comment, false ); 367 DYN StmBoundsStatus * dpBst_gotoDocu 368 = new StmBoundsStatus( *this, *pDocuContext, nF_goto_Docu, false ); 369 DYN StmBoundsStatus * dpBst_gotoPreprocessor 370 = new StmBoundsStatus( *this, *pContext_Preprocessor, nF_goto_Preprocessor, false ); 371 DYN StmBoundsStatus * dpBst_gotoConstString 372 = new StmBoundsStatus( *this, *pContext_ConstString, nF_goto_Const, false ); 373 DYN StmBoundsStatus * dpBst_gotoConstChar 374 = new StmBoundsStatus( *this, *pContext_ConstChar, nF_goto_Const, false ); 375 DYN StmBoundsStatus * dpBst_gotoConstNumeric 376 = new StmBoundsStatus( *this, *pContext_ConstNumeric, nF_goto_Const, false ); 377 DYN StmBoundsStatus * dpBst_gotoUnblockMacro 378 = new StmBoundsStatus( *this, *pContext_UnblockMacro, nF_goto_UnblockMacro, false ); 379 380 // dpMain aufbauen: 381 aStateMachine.AddStatus(dpStatusTop); 382 383 aStateMachine.AddStatus(dpStatusWhite); 384 aStateMachine.AddStatus(dpStatusBez); 385 386 aStateMachine.AddStatus(dpBst_finError); 387 aStateMachine.AddStatus(dpBst_finIgnore); 388 aStateMachine.AddStatus(dpBst_finBezeichner); 389 aStateMachine.AddStatus(dpBst_finKeyword); 390 aStateMachine.AddStatus(dpBst_finPunctuation); 391 aStateMachine.AddStatus(dpBst_finBiType); 392 aStateMachine.AddStatus(dpBst_finTypeModifier); 393 aStateMachine.AddStatus(dpBst_finEOL); 394 aStateMachine.AddStatus(dpBst_finEOF); 395 396 aStateMachine.AddStatus(dpBst_gotoComment); 397 aStateMachine.AddStatus(dpBst_gotoDocu); 398 aStateMachine.AddStatus(dpBst_gotoPreprocessor); 399 aStateMachine.AddStatus(dpBst_gotoConstString); 400 aStateMachine.AddStatus(dpBst_gotoConstChar); 401 aStateMachine.AddStatus(dpBst_gotoConstNumeric); 402 aStateMachine.AddStatus(dpBst_gotoUnblockMacro); 403 404 // Identifier 405 406 // Keywords and other unique Tokens 407 aStateMachine.AddToken("operator",TCF_operator,A_nBezDefStatus,finKeyword); 408 aStateMachine.AddToken("class",TCF_class,A_nBezDefStatus,finKeyword); 409 aStateMachine.AddToken("struct",TCF_struct,A_nBezDefStatus,finKeyword); 410 aStateMachine.AddToken("union",TCF_union,A_nBezDefStatus,finKeyword); 411 aStateMachine.AddToken("enum",TCF_enum,A_nBezDefStatus,finKeyword); 412 aStateMachine.AddToken("typedef",TCF_typedef,A_nBezDefStatus,finKeyword); 413 aStateMachine.AddToken("public",TCF_public,A_nBezDefStatus,finKeyword); 414 aStateMachine.AddToken("protected",TCF_protected,A_nBezDefStatus,finKeyword); 415 aStateMachine.AddToken("private",TCF_private,A_nBezDefStatus,finKeyword); 416 aStateMachine.AddToken("template",TCF_template,A_nBezDefStatus,finKeyword); 417 aStateMachine.AddToken("virtual",TCF_virtual,A_nBezDefStatus,finKeyword); 418 aStateMachine.AddToken("friend",TCF_friend,A_nBezDefStatus,finKeyword); 419 aStateMachine.AddToken("~",TCF_Tilde,A_nOperatorDefStatus,finKeyword); 420 aStateMachine.AddToken("const",TCF_const,A_nBezDefStatus,finKeyword); 421 aStateMachine.AddToken("volatile",TCF_volatile,A_nBezDefStatus,finKeyword); 422 aStateMachine.AddToken("extern",TCF_extern,A_nBezDefStatus,finKeyword); 423 aStateMachine.AddToken("static",TCF_static,A_nBezDefStatus,finKeyword); 424 aStateMachine.AddToken("mutable",TCF_mutable,A_nBezDefStatus,finKeyword); 425 aStateMachine.AddToken("register",TCF_register,A_nBezDefStatus,finKeyword); 426 aStateMachine.AddToken("inline",TCF_inline,A_nBezDefStatus,finKeyword); 427 aStateMachine.AddToken("explicit",TCF_explicit,A_nBezDefStatus,finKeyword); 428 aStateMachine.AddToken("namespace",TCF_namespace,A_nBezDefStatus,finKeyword); 429 aStateMachine.AddToken("using",TCF_using,A_nBezDefStatus,finKeyword); 430 aStateMachine.AddToken("throw",TCF_throw,A_nBezDefStatus,finKeyword); 431 aStateMachine.AddToken("{",TCF_SwBracketOpen,A_nOperatorDefStatus,finKeyword); 432 aStateMachine.AddToken("}",TCF_SwBracketClose,A_nOperatorDefStatus,finKeyword); 433 aStateMachine.AddToken("[",TCF_ArBracketOpen,A_nOperatorDefStatus,finKeyword); 434 aStateMachine.AddToken("]",TCF_ArBracketClose,A_nOperatorDefStatus,finKeyword); 435 aStateMachine.AddToken("(",TCF_BracketOpen,A_nOperatorDefStatus,finKeyword); 436 aStateMachine.AddToken(")",TCF_BracketClose,A_nOperatorDefStatus,finKeyword); 437 aStateMachine.AddToken("::",TCF_DblColon,A_nOperatorDefStatus,finKeyword); 438 aStateMachine.AddToken(";",TCF_Semikolon,A_nOperatorDefStatus,finKeyword); 439 aStateMachine.AddToken(",",TCF_Komma,A_nOperatorDefStatus,finKeyword); 440 aStateMachine.AddToken(":",TCF_Colon,A_nOperatorDefStatus,finKeyword); 441 aStateMachine.AddToken("=",TCF_Zuweisung,A_nOperatorDefStatus,finKeyword); 442 aStateMachine.AddToken("<",TCF_Smaller,A_nOperatorDefStatus,finKeyword); 443 aStateMachine.AddToken(">",TCF_Bigger,A_nOperatorDefStatus,finKeyword); 444 aStateMachine.AddToken("*",TCF_Stern,A_nOperatorDefStatus,finKeyword); 445 aStateMachine.AddToken("&",TCF_Ampersand,A_nOperatorDefStatus,finKeyword); 446 aStateMachine.AddToken("...",TCF_Ellipse,A_nOperatorDefStatus,finKeyword); 447 aStateMachine.AddToken("typename",TCF_typename,A_nOperatorDefStatus,finKeyword); 448 449 // Operators 450 aStateMachine.AddToken("==",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 451 aStateMachine.AddToken("!=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 452 aStateMachine.AddToken("<=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 453 aStateMachine.AddToken(">=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 454 aStateMachine.AddToken("&&",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 455 aStateMachine.AddToken("||",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 456 aStateMachine.AddToken("!",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 457 aStateMachine.AddToken("new",TCF_Operator,A_nBezDefStatus,finPunctuation); 458 aStateMachine.AddToken("delete",TCF_Operator,A_nBezDefStatus,finPunctuation); 459 aStateMachine.AddToken("sizeof",TCF_Operator,A_nBezDefStatus,finPunctuation); 460 aStateMachine.AddToken("typeid",TCF_Operator,A_nBezDefStatus,finPunctuation); 461 aStateMachine.AddToken("+",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 462 aStateMachine.AddToken("-",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 463 aStateMachine.AddToken("/",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 464 aStateMachine.AddToken("%",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 465 aStateMachine.AddToken("^",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 466 aStateMachine.AddToken("|",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 467 aStateMachine.AddToken("<<",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 468 aStateMachine.AddToken(">>",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 469 aStateMachine.AddToken(".",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 470 aStateMachine.AddToken("->",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 471 aStateMachine.AddToken("?",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 472 aStateMachine.AddToken("+=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 473 aStateMachine.AddToken("-=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 474 aStateMachine.AddToken("*=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 475 aStateMachine.AddToken("/=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 476 aStateMachine.AddToken("%=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 477 aStateMachine.AddToken("&=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 478 aStateMachine.AddToken("|=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 479 aStateMachine.AddToken("^=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 480 aStateMachine.AddToken("<<=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 481 aStateMachine.AddToken(">>=",TCF_Operator,A_nOperatorDefStatus,finPunctuation); 482 483 // Builtin types 484 aStateMachine.AddToken("char", TCF_BuiltInType, A_nBezDefStatus, finBiType); 485 aStateMachine.AddToken("short", TCF_BuiltInType, A_nBezDefStatus, finBiType); 486 aStateMachine.AddToken("int", TCF_BuiltInType, A_nBezDefStatus, finBiType); 487 aStateMachine.AddToken("long", TCF_BuiltInType, A_nBezDefStatus, finBiType); 488 aStateMachine.AddToken("float", TCF_BuiltInType, A_nBezDefStatus, finBiType); 489 aStateMachine.AddToken("double",TCF_BuiltInType, A_nBezDefStatus, finBiType); 490 aStateMachine.AddToken("wchar_t",TCF_BuiltInType, A_nBezDefStatus, finBiType); 491 aStateMachine.AddToken("size_t",TCF_BuiltInType, A_nBezDefStatus, finBiType); 492 493 // Type modifiers 494 aStateMachine.AddToken("signed", TCF_TypeModifier, A_nBezDefStatus, finTypeModifier); 495 aStateMachine.AddToken("unsigned", TCF_TypeModifier, A_nBezDefStatus, finTypeModifier); 496 497 // To ignore 498 aStateMachine.AddToken("auto", 0, A_nBezDefStatus, finIgnore); 499 aStateMachine.AddToken("_cdecl", 0, A_nBezDefStatus, finIgnore); 500 aStateMachine.AddToken("__cdecl", 0, A_nBezDefStatus, finIgnore); 501 aStateMachine.AddToken("__stdcall", 0, A_nBezDefStatus, finIgnore); 502 aStateMachine.AddToken("__fastcall",0, A_nBezDefStatus, finIgnore); 503 aStateMachine.AddToken("/**/", 0, A_nOperatorDefStatus,finIgnore); 504 505 // Context changers 506 aStateMachine.AddToken("#", 0, A_nOperatorDefStatus, gotoPreprocessor); 507 aStateMachine.AddToken("#undef",0, A_nOperatorDefStatus, gotoPreprocessor); 508 aStateMachine.AddToken("#unblock-", 509 0, A_nOperatorDefStatus, gotoUnblockMacro); 510 aStateMachine.AddToken("/*", 0, A_nOperatorDefStatus, gotoComment); 511 aStateMachine.AddToken("//", 0, A_nOperatorDefStatus, gotoComment); 512 aStateMachine.AddToken("/**", 0, A_nOperatorDefStatus, gotoDocu); 513 aStateMachine.AddToken("///", 0, A_nOperatorDefStatus, gotoDocu); 514 515 // Line ends 516 // regular 517 aStateMachine.AddToken("\r\n", 0, A_nOperatorDefStatus, finEOL); 518 aStateMachine.AddToken("\n", 0, A_nOperatorDefStatus, finEOL); 519 aStateMachine.AddToken("\r", 0, A_nOperatorDefStatus, finEOL); 520 // To ignore in some cases(may be only at preprocessor?), but 521 // linecount has to be incremented. 522 aStateMachine.AddToken("\\\r\n",0, A_nOperatorDefStatus, finEOL); 523 aStateMachine.AddToken("\\\n", 0, A_nOperatorDefStatus, finEOL); 524 aStateMachine.AddToken("\\\r", 0, A_nOperatorDefStatus, finEOL); 525 }; 526 527 528 } // namespace cpp 529 530