diff -r 000000000000 -r dfb7c4ff071f commsfwtools/commstools/utracedecoder/inc/messagedefparser/definitiontokenizer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwtools/commstools/utracedecoder/inc/messagedefparser/definitiontokenizer.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,154 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef DEFINITIONTOKENIZER_H +#define DEFINITIONTOKENIZER_H + +#include +#include +#include + +namespace Tokens +{ + +const int KBufferSize = 2048; +const int KMaxTokenSize = 128; + +enum TTokenType + { + EUnknown, + + EColon, + EEquals, + + EInclude, + EConst, + EEnd, + EEnum, + EStruct, + ESignature, + EContext, + EMessage, + ETypeId, + EMessageId, + EAlias, + + EIntType, + EPadType, + EMessageIdType, + + EIdentifier, + ENumberDec, + ENumberHex, + EString, + + EDisplayDec, + EDisplayHex, + }; + + enum TResult + { + ENoError, + ETokenFound = ENoError, + + EEndOfFile, + EUnexpectedToken, + ETokenTooBig, + EUnterminatedString, + EUnknownState, + EFileNotFound + }; + + const char* TokenTypeToString(TTokenType aType); + + class CDefinitionTokenizer + { + public: + CDefinitionTokenizer(); + ~CDefinitionTokenizer(); + + TResult LoadDefinitionFile(const std::string& aFilename); + TResult GetNextToken(); + + inline const char* Token() + { + return iToken; + } + + inline TTokenType TokenType() + { + return iTokenType; + } + + inline int Line() + { + return iLine; + } + + private: + enum TTokenState + { + EStateComplete, + EStateError, + EStateStartToken, + EStateMaybeComment, + EStateComment, + EStateMultiLineComment, + EStateMaybeEndMultiLineComment, + EStateNumber, + EStateDecimalNumber, + EStateMaybeHexNumber, + EStateHexNumber, + EStateIdentifier, + EStateMaybeString, + EStateMaybeNegativeNumber + }; + + void RefillBuffer(); + bool IsTerminalChar(); + void ExamineIdentifierForKeyword(); + + TTokenState ProcessStateStartToken(); + TTokenState ProcessStateMaybeComment(); + TTokenState ProcessStateComment(); + TTokenState ProcessStateMultiLineComment(); + TTokenState ProcessStateDecimalNumber(); + TTokenState ProcessStateNumber(); + TTokenState ProcessStateMaybeHexNumber(); + TTokenState ProcessStateHexNumber(); + TTokenState ProcessStateIdentifier(); + TTokenState ProcessStateMaybeString(); + TTokenState ProcessStateMaybeNegativeNumber(); + + private: + std::ifstream iInputFile; + char* iInputBuffer; + int iBufferOffset; + int iLastBufferOffset; + int iBufferSize; + bool iBufferValid; + char* iToken; + int iTokenOffset; + TTokenType iTokenType; + int iLine; + TTokenState iState; + TResult iError; + }; + +} // namespace Tokens + +#endif +// DEFINITIONTOKENIZER_H +