/***************************************************************************
parser.h - description
-------------------
begin : Thu Apr 20 2000
copyright : (C) 2000 by Jan H. Meinke
email : meinke@bigfoot.com
***************************************************************************/
/***************************************************************************
* *
* 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 PARSER_H
#define PARSER_H
#include <iostream>
#include <string>
#include <cctype>
#include <stdlib.h>
/** Takes an input stream and divides it into tokens.
* This code was mostly inspired by the calculator example by
* Bjarne Stroustrup, "The C++ Programming Language", 3rd., pp. 108ff (1997)
*
*@author Jan H. Meinke
*/
class Parser {
public:
Parser(istream* is);
~Parser();
public: // Public attributes
/** Possible token values used by the Parser. */
enum Tokens{
STRING, NUMBER, END, BAD, NEWLINE, DIRECTIVE,
COLON = ':', OTAG = '<', CTAG ='>', DEFTAG = '!'
};
enum Tag{
DIR
};
/** This variable contains the numerical value of the last token
* if appropriate.
*/
double numberValue;
/** Holds the type of the last token read. */
Tokens currentToken;
/** This variable contains the string value of the last token
* if appropriate.
*/
string stringValue;
/** Returns the next token in the stream. The value
* is stored in the public variables stringValue
* and numberValue if appropriate.
*/
Tokens nextToken();
/** Tries to construct a tag of the form < element.name attribute1 attribute2 ... >.
* The elementName will be stored in tagAttribute[0] and all following attributes
* in tagAttribute[1..n].
*/
Tag getTag();
private: // Private attributes
/** Data input stream to be tokenized */
istream* is;
};
#endif
| Generated by: meinke@orion on Mon May 8 18:18:46 2000, using kdoc 2.0a35. |