OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
scanner.hpp
Go to the documentation of this file.
1 #ifndef COMPILER_SCANNER_H_INCLUDED
2 #define COMPILER_SCANNER_H_INCLUDED
3 
4 #include <string>
5 #include <iosfwd>
6 #include <vector>
7 
8 #include "tokenloc.hpp"
9 
10 namespace Compiler
11 {
12  class ErrorHandler;
13  class Parser;
14  class Extensions;
15 
20 
21  class Scanner
22  {
24  {
27  };
28 
32  std::istream& mStream;
38  std::string mPutbackName;
43 
44  public:
45 
46  enum keyword
47  {
62  };
63 
64  enum special
65  {
73  };
74 
75  private:
76 
77  // not implemented
78 
79  Scanner (const Scanner&);
80  Scanner& operator= (const Scanner&);
81 
82  bool get (char& c);
83 
84  void putback (char c);
85 
86  bool scanToken (Parser& parser);
87 
88  bool scanInt (char c, Parser& parser, bool& cont);
89 
90  bool scanFloat (const std::string& intValue, Parser& parser, bool& cont);
91 
92  bool scanName (char c, Parser& parser, bool& cont);
93 
95  bool scanName (std::string& name);
96 
97  bool scanSpecial (char c, Parser& parser, bool& cont);
98 
99  bool isStringCharacter (char c, bool lookAhead = true);
100 
101  static bool isWhitespace (char c);
102 
103  public:
104 
105  Scanner (ErrorHandler& errorHandler, std::istream& inputStream,
106  const Extensions *extensions = 0);
108 
109  void scan (Parser& parser);
111 
112  void putbackSpecial (int code, const TokenLoc& loc);
114 
115  void putbackInt (int value, const TokenLoc& loc);
117 
118  void putbackFloat (float value, const TokenLoc& loc);
120 
121  void putbackName (const std::string& name, const TokenLoc& loc);
123 
124  void putbackKeyword (int keyword, const TokenLoc& loc);
126 
127  void listKeywords (std::vector<std::string>& keywords);
129 
133  void enableIgnoreNewlines();
134 
138  void enableStrictKeywords();
139 
143  void enableTolerantNames();
144  };
145 }
146 
147 #endif
Definition: scanner.hpp:58
bool scanSpecial(char c, Parser &parser, bool &cont)
Definition: scanner.cpp:397
Definition: scanner.hpp:69
Definition: scanner.hpp:69
putback_type mPutback
Definition: scanner.hpp:34
Definition: scanner.hpp:68
Definition: scanner.hpp:51
Definition: scanner.hpp:25
Definition: scanner.hpp:68
Definition: scanner.hpp:48
TokenLoc mLoc
Definition: scanner.hpp:30
float mPutbackFloat
Definition: scanner.hpp:37
void listKeywords(std::vector< std::string > &keywords)
Append all known keywords to keywords.
Definition: scanner.cpp:652
Definition: scanner.hpp:50
bool scanInt(char c, Parser &parser, bool &cont)
Definition: scanner.cpp:166
bool scanName(char c, Parser &parser, bool &cont)
Definition: scanner.cpp:283
void enableStrictKeywords()
Definition: scanner.cpp:666
Definition: scanner.hpp:68
void putbackName(const std::string &name, const TokenLoc &loc)
put back a name token
Definition: scanner.cpp:638
Location of a token in a source file.
Definition: tokenloc.hpp:10
Scanner & operator=(const Scanner &)
Definition: scanner.hpp:58
void enableIgnoreNewlines()
Definition: scanner.cpp:661
Definition: scanner.hpp:51
Definition: scanner.hpp:66
keyword
Definition: scanner.hpp:46
Definition: scanner.hpp:26
Definition: scanner.hpp:48
Definition: scanner.hpp:25
Definition: scanner.hpp:61
Definition: scanner.hpp:50
Definition: scanner.hpp:59
TokenLoc mPutbackLoc
Definition: scanner.hpp:39
Definition: scanner.hpp:50
Definition: scanner.hpp:69
bool mStrictKeywords
Definition: scanner.hpp:40
Scanner(const Scanner &)
Error handling.
Definition: errorhandler.hpp:14
Definition: scanner.hpp:69
special
Definition: scanner.hpp:64
Definition: scanner.hpp:68
Collection of compiler extensions.
Definition: extensions.hpp:39
Definition: scanner.hpp:25
std::istream & mStream
Definition: scanner.hpp:32
void putbackSpecial(int code, const TokenLoc &loc)
put back a special token
Definition: scanner.cpp:617
Definition: scanner.hpp:55
Definition: scanner.hpp:61
Definition: scanner.hpp:58
Definition: scanner.hpp:71
Definition: scanner.hpp:26
Definition: scanner.hpp:61
std::string mPutbackName
Definition: scanner.hpp:38
void putback(char c)
Definition: scanner.cpp:44
Definition: scanner.hpp:60
Definition: scanner.hpp:68
Definition: scanner.hpp:70
Definition: scanner.hpp:67
bool scanToken(Parser &parser)
Definition: scanner.cpp:50
Definition: scanner.hpp:56
int code
Definition: crashcatcher.cpp:78
ErrorHandler & mErrorHandler
Definition: scanner.hpp:29
Definition: scanner.hpp:67
putback_type
Definition: scanner.hpp:23
void enableTolerantNames()
Definition: scanner.cpp:671
Definition: scanner.hpp:49
Definition: scanner.hpp:49
Definition: scanner.hpp:49
bool isStringCharacter(char c, bool lookAhead=true)
Definition: scanner.cpp:586
Definition: scanner.hpp:54
int mPutbackCode
Definition: scanner.hpp:35
Parser base class.
Definition: parser.hpp:17
Definition: scanner.hpp:25
void putbackFloat(float value, const TokenLoc &loc)
put back a float token
Definition: scanner.cpp:631
Definition: scanner.hpp:68
void putbackInt(int value, const TokenLoc &loc)
put back an integer token
Definition: scanner.cpp:624
Definition: scanner.hpp:54
Definition: scanner.hpp:50
static bool isWhitespace(char c)
Definition: scanner.cpp:597
void scan(Parser &parser)
Scan a token and deliver it to the parser.
Definition: scanner.cpp:612
Definition: scanner.hpp:52
Definition: scanner.hpp:53
int mPutbackInteger
Definition: scanner.hpp:36
void putbackKeyword(int keyword, const TokenLoc &loc)
put back a keyword token
Definition: scanner.cpp:645
bool scanFloat(const std::string &intValue, Parser &parser, bool &cont)
Definition: scanner.cpp:224
bool mIgnoreNewline
Definition: scanner.hpp:42
const Extensions * mExtensions
Definition: scanner.hpp:33
Definition: scanner.hpp:57
bool mTolerantNames
Definition: scanner.hpp:41
Scanner.
Definition: scanner.hpp:21
TokenLoc mPrevLoc
Definition: scanner.hpp:31
const char * name
Definition: crashcatcher.cpp:67
Definition: scanner.hpp:72