00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef HxSadParser_h
00012 #define HxSadParser_h
00013
00014 #include "HxString.h"
00015 #include "HxToken.h"
00016
00017 #include "HxSyntaxLeafNode.h"
00018 #include "HxSyntaxBranchNode.h"
00019
00020 class HxCharReader;
00021 class HxScanner;
00022
00023 class HxSadParser
00024 {
00025 public:
00026 static HxSadParser& instance();
00027
00028 void parse();
00029
00030 void setReader(HxCharReader&) const;
00031 void setFileName(HxString fileName);
00032 HxString getFileName() const;
00033
00034 int scan();
00035 HxToken& peek(int n = 0);
00036
00037 HxBool isConstructor();
00038
00039 void messageHead();
00040 void message(int tokNum);
00041
00042 int lineNr() const;
00043 HxToken& getToken();
00044
00045 private:
00046 HxSadParser();
00047 HxSadParser(const HxSadParser&);
00048 HxSadParser& operator=(const HxSadParser&);
00049
00050 friend class HxSadParserFriend;
00051
00052 HxString _fileName;
00053 HxScanner* _scanner;
00054
00055 HxToken _currentToken;
00056 int _holdToken;
00057 };
00058
00059 inline HxString
00060 HxSadParser::getFileName() const { return _fileName; }
00061
00062
00063
00064 extern void sadParse();
00065 extern int SadLsymb;
00066 extern void SadLmessage(int tokNum);
00067
00068 #endif