author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
/* * Copyright (c) 1997-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: * Header READER.CPP * */ #include "READER.H" Reader::Reader() { iLexAnal = NULL; } boolean Reader::Open(const String& aFilename) { boolean state; String string = aFilename; if (iLexAnal != NULL) delete iLexAnal; iLexAnal = new LexAnal(string.Text()); if (iLexAnal) { state = etrue; iLex =& (iLexAnal->iLex); iLexAnal->Read(); // reads first lexical } else state = efalse; return state; } Reader::~Reader() { if (iLexAnal != NULL) delete iLexAnal; } boolean Reader::_EOF() { return ((iLex->iType) == ELexEOF); } boolean Reader::NewLine() { boolean state; if (iLex->iType == ELexNL) { iLexAnal->Read(); state = etrue; } else { Error(String("Newline expected")); state = efalse; } return state; } boolean Reader::Number(int& aNumber) { boolean state; if (iLex->iType == ELexNumber) { aNumber = iLex->iNumber; iLexAnal->Read(); state = etrue; } else { Error(String("Number expected")); state = efalse; } return state; } boolean Reader::IdentComp(const String& aIdent) { boolean state; if (iLex->iType == ELexIdent) { if (aIdent == iLex->iText) { iLexAnal->Read(); state = etrue; } else state = efalse; } else { state = efalse; } return state; } boolean Reader::IdentCopy(String& aIdent) { boolean state; if (iLex->iType == ELexIdent) { aIdent = iLex->iText; iLexAnal->Read(); state = etrue; } else { Error(String("Identifier expected")); state = efalse; } return state; } boolean Reader::StringCopy(String& aString) { boolean state; if (iLex->iType == ELexString) { aString = iLex->iText; iLexAnal->Read(); state = etrue; } else { Error(String("String expected")); state = efalse; } return state; } boolean Reader::Operator(char& aCh) { boolean state; if (iLex->iType == ELexOperator) { aCh = iLex->iText[0]; iLexAnal->Read(); state = etrue; } else { Error(String("Operator expected")); state = efalse; } return state; } EXPORT_C void Reader::Error(const String& aString) { cerr << "Error: " << aString; iLexAnal->Report(); while ((iLex->iType != ELexNL) && (iLex->iType != ELexEOF)) iLexAnal->Read(); }