diff -r 000000000000 -r f58d6ec98e88 aknlayoutcompiler/inc/CoreParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aknlayoutcompiler/inc/CoreParser.h Thu Dec 17 09:14:18 2009 +0200 @@ -0,0 +1,125 @@ +/* +* Copyright (c) 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 COREPARSER_H +#define COREPARSER_H + +#include +#include +#include + +class Parser; + +class ParseResult + { +public: + ParseResult(); + static ParseResult Fail(); + + bool Matched() const; + +public: + int iRuleId; + int iStart; + int iEnd; + std::deque iChildren; + }; + + +class Parser + { +public: + Parser(const char* aMatch); + static Parser EOS(); + static Parser Int(); + static Parser Real(); + static const Parser& Nul(); + + ParseResult Parse(const std::string& aString) const; + + int Id() const; + void SetId(int aId); + + Parser(); + Parser(const Parser& aOther); + ~Parser(); + const Parser& operator=(const Parser& aOther); + +private: + friend Parser operator|(const Parser& aFirst, const Parser& aRest); + friend Parser operator>>(const Parser& aFirst, const Parser& aRest); + friend Parser operator*(const Parser& aSub); + + enum T0Op + { + EExact, + EEos, + EInt, + EReal, + ENul, + ELast0 + }; + enum T1Op + { + EMult = ELast0, + ELast1 + }; + enum T2Op + { + ESeq = ELast1, + EAlt + }; + + Parser(T0Op aOp); + Parser(T1Op aOp, const Parser& aSub); + Parser(T2Op aOp, const Parser& aFirst, const Parser& aRest); + + struct Step + { + Step(const Parser* aRule, int aPos, int aParent) + : iRule(aRule), iStep(0), iPos(aPos), iParent(aParent) + { + iResult.iStart = aPos; + } + const Parser* iRule; + int iStep; + ParseResult iResult; + int iPos; + int iParent; + }; + + enum TMatchRes + { + EFail, + EPass, + EContinue + }; + + TMatchRes ParseStep(int aStep, const std::string& aString, int aPos, std::vector& aStack) const; + +private: + int iOp; + const char* iMatch; + const Parser* iSub1; + const Parser* iSub2; + int iId; + }; + +Parser operator|(const Parser& aFirst, const Parser& aRest); +Parser operator>>(const Parser& aFirst, const Parser& aRest); +//Parser operator*(const Parser& aSub); + +#endif