00001 /**************************************************************************** 00002 00003 $Id: EGOAParser.h,v 1.3 2002/11/08 03:47:38 motegi Exp $ 00004 Copyright (C) Higuchi Lab. All rights reserved. 00005 00006 *****************************************************************************/ 00007 #ifndef INCLUDE__PARSER_H__FILE 00008 #define INCLUDE__PARSER_H__FILE 00009 00010 #include <string> 00011 #include <iostream> 00012 00013 class EGOAConstruct; 00014 class EGOAScanner; 00015 00016 class EGOAParser { 00017 public: 00018 enum Token { 00019 BEGINTAG, 00020 ENDTAG, 00021 STRING, 00022 DONE 00023 }; 00024 00025 EGOAParser(); 00026 EGOAParser(EGOAConstruct*, std::istream*); 00027 virtual ~EGOAParser(); 00028 00029 virtual void initialize(EGOAConstruct*, std::istream*); 00030 00031 virtual void parse(); 00032 virtual bool checkToken(Token specificToken) const { 00033 return (nowToken == specificToken); 00034 } 00035 virtual void match(Token specificToken); 00036 virtual void changeState(EGOAConstruct* newState){ 00037 state = newState; 00038 } 00039 virtual void error(const std::string&,Token); 00040 00041 virtual Token getNowToken() const { 00042 return nowToken; 00043 } 00044 virtual const std::string& getNowString() const { 00045 return nowString; 00046 } 00047 virtual unsigned getNowLine() const { 00048 return nowLine; 00049 } 00050 virtual const std::string& getNowTag() const { 00051 return nowTag; 00052 } 00053 virtual bool getResult() const { 00054 return flag; 00055 } 00056 00057 virtual void setNowTag(const std::string& tag) { 00058 nowTag = tag; 00059 } 00060 protected: 00061 EGOAParser(const EGOAParser&); 00062 EGOAParser& operator=(const EGOAParser&); 00063 00064 EGOAConstruct* state; 00065 EGOAScanner* scanner; 00066 Token nowToken; 00067 std::string nowString; 00068 unsigned nowLine; 00069 std::string nowTag; 00070 bool flag; 00071 }; 00072 00073 #endif // INCLUDE__PARSER_H__FILE 00074 00075