#ifndef _PARSER_H_
#define _PARSER_H_
#define WELCOME " *** Brahms Interpreter, introduced 2001 by the incredible brain power of Dr. Jan M. Würthner\n(type help if you need help)\n"
#define HELPMSG "(funlist) shows all functions. Type in a functions name to get the functions usage.\n(oblist) shows all defined objects.\n(enzymes) shows all enzymes\n"
/*
enum Function {plus,plus1,minus,minus1,times,times1,eval,setq,sett,oblist,funlist,car,cdr,nth,replacenth,remo,delet,load,seto,
setv,setl,enzymes,dump,forn,list,newo,equal,eq,notequal,neq,lessthan,lth,greaterthan,gth,ifn,edit,appndvlu,addmem,makeenz,enzyme,
adjoint,appnd,connecto,rnd,lngth,valencs,nthvl,rn};
*/
enum Function {plus,plus1,minus,minus1,times,times1,eval,setq,sett,oblist,funlist,car,cdr,nth,replacenth,load,
dump,forn,list,equal,eq,notequal,neq,lessthan,lth,greaterthan,gth,ifn,
appnd,rnd,lngth};
enum ElementNamesIndex {LIST,INT,DOUBLE,STRING,FUNCTION,OBJECT,VALENCE,ENZYME,ERR,BOOLL};
class pList;
class pElement;
class ElPtr;
void addToElList(ElPtr*);
// ********************************************
//
// class Id for Debugging purposes
// -------------------------------
//
class Id
{
int id;
static int idcounter;
public:
Id();
virtual ~Id();
void print();
};
// ********************************************
//
// Element Pointer (Lisp's ObList)
// -------------------------------
//
class ElPtr
{
private:
ElPtr * next;
pElement * element;
char * name;
public:
ElPtr();
ElPtr(pElement*);
ElPtr(pElement*,char*);
~ElPtr();
//void eraseElement();
void setNext(ElPtr*);
ElPtr * Next();
char * Name();
void setName(char*);
pElement * Element();
};
// ********************************************
//
// abstract classes pElement and pAtom
// -----------------------------------
//
class pElement : public Id
{
protected:
bool qtd;
public:
pElement(){}
virtual ~pElement(){};
virtual void setNext(pElement*)=0;
virtual pElement * Next()=0;
virtual pElement * Eval(pList * li=0)=0;
virtual char * get()=0;
virtual char * dumpit()=0;
virtual void set(char*)=0;
virtual ElementNamesIndex isA() const = 0;
virtual const char * elementName() const = 0;
virtual pElement * copy() const = 0;
virtual int compare(pElement*)=0;
virtual void quote(bool)=0;
virtual bool quoted() const=0;
virtual bool isList() const = 0;
virtual bool isAtom() const=0;
virtual bool isInt() const=0;
virtual bool isDouble() const=0;
virtual bool isFunction() const=0;
virtual bool isString() const=0;
virtual bool isError() const=0;
};
class pAtom : public pElement
{
private:
public:
pAtom(){}
virtual ~pAtom(){};
virtual void setNext(pElement*)=0;
virtual pElement * Next()=0;
virtual pElement * Eval(pList * li=0)=0;
virtual char * get()=0;
virtual char * dumpit();
virtual void set(char*)=0;
virtual ElementNamesIndex isA() const = 0;
virtual const char * elementName() const = 0;
virtual pElement * copy() const = 0;
virtual int compare(pElement*)=0;
virtual void quote(bool)=0;
virtual bool quoted() const=0;
virtual bool isList() const=0;
virtual bool isAtom() const=0;
virtual bool isInt() const=0;
virtual bool isDouble() const=0;
virtual bool isFunction() const=0;
virtual bool isString() const=0;
virtual bool isError() const=0;
};
// ********************************************
//
// pList
// -----
//
class pList : public pElement
{
private:
pElement * next;
pElement * top;
public:
pList();
virtual ~pList();
pList(pElement*);
pList(bool);
void setTop(pElement*);
pElement * Top() const { return top; }
bool appendElement(pElement*);
bool removeElement(pElement*);
bool exchange(pElement*,pElement*);
int length();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual char * dumpit();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
void print();
};
// **********************************************
//
// Following: Concrete classes derived from pAtom
//
// pInt
// ----
//
class pInt : public pAtom
{
private:
pElement * next;
long int value;
public:
pInt();
pInt(int);
int getInt();
void setInt(int);
virtual ~pInt();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
// ********************************************
//
// pDouble
// -------
//
class pDouble : public pAtom
{
private:
pElement * next;
double value;
public:
pDouble();
pDouble(double);
double getDouble();
virtual ~pDouble();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
// ********************************************
//
// pString
// -------
//
class pString : public pAtom
{
private:
pElement * next;
char * value;
public:
pString();
pString(const char*);
pString(const char*,bool);
char * getQuoted();
char * getPtr();
virtual ~pString();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
// ********************************************
//
// pError
// ------
//
class pError : public pAtom
{
private:
pElement * next;
int value;
public:
pError();
pError(int);
int getValue();
virtual ~pError();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
// ********************************************
//
// pFunction
// ---------
//
pElement * PARSE(char*);
class pFunction : public pAtom
{
private:
pElement * next;
Function value;
public:
pFunction();
pFunction(Function);
Function getValue();
bool ForceQuote();
virtual ~pFunction();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
/*
// ********************************************
//
// pObject
// -------
//
class SyclRadical;
class pObject : public pAtom
{
private:
pElement * next;
SyclRadical * value;
public:
pObject();
pObject(SyclRadical*);
SyclRadical * getValue();
void deleteRadical();
virtual ~pObject();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
// ********************************************
//
// pValence
// --------
//
class SyclValence;
class pValence : public pAtom
{
private:
pElement * next;
SyclValence * value;
public:
pValence();
pValence(SyclValence*);
SyclValence * getValue();
void deleteValence();
virtual ~pValence();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
// ********************************************
//
// pEnzyme
// -------
//
class SyclEnzyme;
class pEnzyme : public pAtom
{
private:
pElement * next;
char * value;
public:
pEnzyme();
pEnzyme(char*);
char * getValue();
virtual ~pEnzyme();
virtual void setNext(pElement*);
virtual pElement * Next();
virtual pElement * Eval(pList * li=0);
virtual char * get();
virtual void set(char*);
virtual ElementNamesIndex isA() const;
virtual const char * elementName() const;
virtual pElement * copy() const;
virtual int compare(pElement*);
virtual void quote(bool);
virtual bool quoted() const;
virtual bool isList() const;
virtual bool isAtom() const;
virtual bool isInt() const;
virtual bool isDouble() const;
virtual bool isFunction() const;
virtual bool isString() const;
virtual bool isError() const;
};
*/
#endif
| Generated by: wuerthne on clouseau on Fri Sep 21 19:20:46 2001, using kdoc 2.0a53. |