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.
tdewebdev/kommander/widget/parsenode.h

124 lines
4.2 KiB

/***************************************************************************
parsenode.cpp - Single parsed item
-------------------
copyright : (C) 2004 Michal Rudolf <mrudolf@kdewebdwev.org>
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef _HAVE_PARSENODE_H_
#define _HAVE_PARSENODE_H_
#include <tqstring.h>
namespace Parse
{
enum Keyword {For, To, Step, End, While, Do, Foreach, In, If, Then, Else, Elseif, Endif, Switch, Case,
Break, Continue, Exit, Dot, Semicolon, Comma, Assign, Less, LessEqual, Greater, GreaterEqual, Equal, NotEqual,
Not, And, Or, False, True, LeftParenthesis, RightParenthesis, LeftBracket, RightBracket,
Plus, Minus, Multiply, Divide, Mod, LastRealKeyword = Mod, Variable, Invalid};
enum KeywordGroup {GroupComparison, GroupAdd, GroupMultiply, GroupMisc};
enum ValueType {ValueString, ValueInt, ValueDouble, ValueValue = ValueDouble, ValueKeyword,
ValueNone, ValueError};
enum Mode{Execute, CheckOnly};
enum Flow{FlowStandard, FlowContinue, FlowBreak, FlowExit};
}
class ParseNode {
public:
/* Default constructor */
ParseNode();
/* Create node from string */
ParseNode(const TQString& s);
/* Create node from integer */
ParseNode(int i);
/* Create node from integer */
ParseNode(uint i);
/* Create node from double */
ParseNode(double d);
/* Create node from keyword */
ParseNode(Parse::Keyword k);
/* Create node from keyword and variable name */
ParseNode(Parse::Keyword k, const TQString& s);
/* Create error node with optional error message */
static ParseNode error(const TQString& s);
/* Return current type */
Parse::ValueType type() const;
/* Return current keyword if appropriate */
Parse::Keyword keyword() const;
/* Cast value to string */
TQString toString() const;
/* Cast value to integer */
int toInt() const;
/* Cast value to double */
double toDouble() const;
/* Cast value to bool */
bool toBool() const;
/* Check if a value is valid */
bool isValid() const;
/* Check if current value is a keyword */
bool isKeyword() const;
/* Check if current value is a given keyword */
bool isKeyword(Parse::Keyword k) const;
/* Check if current value is a variable */
bool isVariable() const;
/* Return the name of variable */
TQString variableName() const;
/* Return error message if applicable */
TQString errorMessage() const;
/* Calculate common type for two nodes */
Parse::ValueType commonType(const ParseNode& p) const;
/* Find common type and compare values */
int compare(const ParseNode& p) const;
/* Various comparing functions */
bool operator==(int i) const;
bool operator==(bool b) const;
bool operator==(const TQString& s) const;
bool operator==(const ParseNode& p) const;
bool operator!=(const ParseNode& p) const;
bool operator>=(const ParseNode& p) const;
bool operator<=(const ParseNode& p) const;
bool operator>(const ParseNode& p) const;
bool operator<(const ParseNode& p) const;
/* set value as integer */
void setValue(int i);
/* set value as double */
void setValue(double d);
/* set value as string */
void setValue(const TQString& s);
/* set value as variable */
void setVariable(const TQString& name);
/* check if it is correct value */
bool isValue() const;
/* for setting some context information, f. e. for bug reporting */
void setContext(int c);
/* get current context */
int context() const;
private:
Parse::ValueType m_type;
union {
int m_int;
double m_double;
Parse::Keyword m_keyword;
};
TQString m_string;
int m_context;
};
#endif