commsfwtools/commstools/utracedecoder/inc/messagedefparser/definitiontokenizer.h
changeset 0 dfb7c4ff071f
--- /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 <iostream>
+#include <fstream>
+#include <string>
+
+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
+