You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.6 KiB
C++
91 lines
2.6 KiB
C++
15 years ago
|
#ifndef COMPILER_PARSER_H_INCLUDED
|
||
|
#define COMPILER_PARSER_H_INCLUDED
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
namespace Compiler
|
||
|
{
|
||
|
class Scanner;
|
||
|
class TokenLoc;
|
||
|
class ErrorHandler;
|
||
|
class Context;
|
||
|
|
||
|
/// \brief Parser base class
|
||
|
///
|
||
|
/// This class defines a callback-parser.
|
||
|
|
||
|
class Parser
|
||
|
{
|
||
|
ErrorHandler& mErrorHandler;
|
||
|
Context& mContext;
|
||
|
|
||
|
protected:
|
||
|
|
||
|
// mutators
|
||
|
|
||
|
void reportSeriousError (const std::string& message, const TokenLoc& loc);
|
||
|
///< Report the error and throw a exception.
|
||
|
|
||
|
void reportError (const std::string& message, const TokenLoc& loc);
|
||
|
///< Report the error
|
||
|
|
||
|
void reportWarning (const std::string& message, const TokenLoc& loc);
|
||
|
///< Report the warning without throwing an exception.
|
||
|
|
||
|
void reportEOF();
|
||
|
///< Report an unexpected EOF condition.
|
||
|
|
||
|
ErrorHandler& getErrorHandler();
|
||
|
///< Return error handler
|
||
|
|
||
|
Context& getContext();
|
||
|
///< Return context
|
||
|
|
||
|
public:
|
||
|
|
||
|
Parser (ErrorHandler& errorHandler, Context& context);
|
||
|
///< constructor
|
||
|
|
||
|
virtual ~Parser();
|
||
|
///< destructor
|
||
|
|
||
|
virtual bool parseInt (int value, const TokenLoc& loc, Scanner& scanner);
|
||
|
///< Handle an int token.
|
||
|
/// \return fetch another token?
|
||
|
///
|
||
|
/// - Default-implementation: Report an error.
|
||
|
|
||
|
virtual bool parseFloat (float value, const TokenLoc& loc, Scanner& scanner);
|
||
|
///< Handle a double token.
|
||
|
/// \return fetch another token?
|
||
|
///
|
||
|
/// - Default-implementation: Report an error.
|
||
|
|
||
|
virtual bool parseName (const std::string& name, const TokenLoc& loc,
|
||
|
Scanner& scanner);
|
||
|
///< Handle a name token.
|
||
|
/// \return fetch another token?
|
||
|
///
|
||
|
/// - Default-implementation: Report an error.
|
||
|
|
||
|
virtual bool parseKeyword (int keyword, const TokenLoc& loc, Scanner& scanner);
|
||
|
///< Handle a keyword token.
|
||
|
/// \return fetch another token?
|
||
|
///
|
||
|
/// - Default-implementation: Report an error.
|
||
|
|
||
|
virtual bool parseSpecial (int code, const TokenLoc& loc, Scanner& scanner);
|
||
|
///< Handle a special character token.
|
||
|
/// \return fetch another token?
|
||
|
///
|
||
|
/// - Default-implementation: Report an error.
|
||
|
|
||
|
virtual void parseEOF (Scanner& scanner);
|
||
|
///< Handle EOF token.
|
||
|
///
|
||
|
/// - Default-implementation: Report an error.
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#endif
|