diff -r 000000000000 -r dfb7c4ff071f commsfwtools/commstools/utracedecoder/src/messagedefparser/constprocessor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwtools/commstools/utracedecoder/src/messagedefparser/constprocessor.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,93 @@ +// 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: +// + +#include "messagedefparser\constprocessor.h" +#include "messagedefparser\initialstate.h" +#include "messagedefparser\definitiontokenizer.h" +#include "util.h" + +namespace Parser +{ + +void CConstProcessor::ProcessState() + { + Tokens::TTokenType tokenType = CurrentTokenType(); + iResult = Parser::EUnexpectedToken; + + switch (iInternalState) + { + case EStateExpectConstIdentifier: + // Expect an identifier for the new const + if (tokenType == Tokens::EIdentifier) + { + CreateTempConst(); + } + break; + + case EStateExpectEquals: + if (tokenType == Tokens::EEquals) + { + iInternalState = EStateExpectValue; + iResult = Parser::ENoError; + } + break; + + case EStateExpectValue: + { + // Expect a value formatted as decimal or hex + if (tokenType == Tokens::ENumberHex) + { + iIdentifier->iValue = HexToVal(CurrentToken()); + CommitConst(); + } + else if (tokenType == Tokens::ENumberDec) + { + iIdentifier->iValue = atol(CurrentToken()); + CommitConst(); + } + break; + } + } + + if (iResult != Parser::ENoError) + { + ParserSM().SetError(iResult); + } + } + +void CConstProcessor::CreateTempConst() + { + if (!ParserSM().FindIdentifier(CurrentToken())) + { + iIdentifier = new CConstIdentifier(CurrentToken()); + iInternalState = EStateExpectEquals; + iResult = Parser::ENoError; + } + else + { + iResult = Parser::EDuplicateIdentifier; + } + } + +void CConstProcessor::CommitConst() + { + ParserSM().AddIdentifier(iIdentifier); + iIdentifier = NULL; + ParserSM().SetState(new CInitialState(ParserSM())); + iResult = Parser::ENoError; + } + +} // namespace Parser +