You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kformula/sequenceparser.h

133 lines
2.9 KiB

/* This file is part of the KDE project
Copyright (C) 2001 Andrea Rizzi <rizzi@kde.org>
Ulrich Kuettler <ulrich.kuettler@mailbox.tu-dresden.de>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef SEQUENCEPARSER_H
#define SEQUENCEPARSER_H
#include <qptrlist.h>
#include <qstring.h>
#include "kformuladefs.h"
KFORMULA_NAMESPACE_BEGIN
class BasicElement;
class ElementType;
class SymbolTable;
/**
* The parser that gets the element list and returns a syntax tree.
*/
class SequenceParser {
public:
SequenceParser(const SymbolTable& table);
/**
* @returns a parse tree.
*/
ElementType* parse(QPtrList<BasicElement>& elements);
/**
* Reads the next token.
*/
void nextToken();
uint getStart() const { return tokenStart; }
uint getEnd() const { return tokenEnd; }
TokenType getTokenType() const { return type; }
/**
* Tells the element about its new type.
*
* @param pos the position of the element
* @param type the new type
*/
void setElementType(uint pos, ElementType* type);
/**
* @returns a new primitive token.
*/
ElementType* getPrimitive();
/**
* @returns the current token's text
*/
QString text();
private:
/**
* Reads the next token which is a number.
*/
void readNumber();
/**
* Reads a sequence of digits.
*/
void readDigits();
/**
* Reads the next token which is some text.
*/
void readText();
/**
* @returns the char at tokenEnd.
*/
QChar getEndChar();
/**
* The elements we want to parse. The parser must not change
* it!
*/
QPtrList<BasicElement> list;
/**
* The position up to which we have read. The current
* token starts here.
*/
uint tokenStart;
/**
* The first position after the current token.
*/
uint tokenEnd;
/**
* The type of the current token.
*/
TokenType type;
/**
* Whether the next token might be a binary operator.
*/
bool binOpAllowed;
/**
* The table that contains all known symbols.
*/
const SymbolTable& table;
};
KFORMULA_NAMESPACE_END
#endif // SEQUENCEPARSER_H