0a00ed3936dbd2befc02d94e8a4d5778176d958c
[ginac.git] / ginac / parser / lexer.h
1 #ifndef GINAC_LEXER_HPP_
2 #define GINAC_LEXER_HPP_
3 #include <iosfwd>
4 #include <string>
5 #include <cstddef>
6 namespace GiNaC
7 {
8
9 class lexer
10 {
11         std::istream* input;
12         std::ostream* output;
13         std::ostream* error;
14         /// last character read from stream
15         int c;
16         /// identifier and number tokens are stored here
17         std::string str;
18         std::size_t line_num;
19         std::size_t column;
20         friend class parser;
21 public:
22
23         lexer(std::istream* in = 0, std::ostream* out = 0, std::ostream* err = 0);
24         ~lexer();
25
26         int gettok();
27         void switch_input(std::istream* in);
28
29         struct token_type
30         {
31                 enum
32                 {
33                         eof             = -1,
34                         identifier      = -4,
35                         number          = -5,
36                         literal         = -6
37
38                 };
39         };
40         
41         /// Symbolic name of the token (for error reporting)
42         std::string tok2str(const int tok) const;
43 };
44
45 } // namespace GiNaC
46
47 #endif // GINAC_LEXER_HPP_
48