mjplusplus  v0.4.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lexer.hpp
Go to the documentation of this file.
1 #ifndef LEXER_HPP
2 #define LEXER_HPP
3 
4 #include <iostream>
5 
6 #include "token.hpp"
7 #include "stateomat.hpp"
8 
9 #include "../util/ErrorReporter.hpp"
10 
11 namespace lexer
12 {
13  class Lexer
14  {
15  protected:
25  std::vector<Token> token_stack;
27  int c;
28  //std::istream::pos_type line_start;
29 
30 #define BUF_SIZE 1024
31  //used for more efficient (blockwise) read operations
32  int fd;
37  char getc();
38  char buf[BUF_SIZE];
39  size_t buf_off;
40  size_t buf_len;
41 
42  off_t line_start;
43 
51  void advancePosition(int nextCharacter);
53 
55  enum kw_states
56  {
111  };
112 
117 
121  static std::vector<std::pair<const char*, Token::Token_type>> kw_vector;
122 
124  static const int kw_lex_table[][26];
125 
126  public:
135  Lexer(const char* file_name, Stateomat const& stateomat, shptr<ErrorReporter> errorReporter);
149  void unget_token(Token const& t);
154  bool good() const;
160  std::string describe(Token::Token_type const& t) const;
161  };
162 }
163 #endif
Definition: lexer.hpp:101
shptr< ErrorReporter > errorReporter
Definition: lexer.hpp:20
Definition: lexer.hpp:89
Definition: lexer.hpp:57
Definition: lexer.hpp:69
Definition: lexer.hpp:73
Definition: lexer.hpp:13
Definition: PositionAwareNode.hpp:6
Definition: lexer.hpp:109
Definition: lexer.hpp:100
std::vector< Token > token_stack
Definition: lexer.hpp:25
Definition: lexer.hpp:63
Definition: token.hpp:11
Definition: lexer.hpp:75
void unget_token(Token const &t)
Definition: lexer.cpp:374
char getc()
Definition: lexer.cpp:206
std::pair< unsigned int, unsigned int > source_position_t
Definition: globals.hpp:10
Definition: lexer.hpp:62
Definition: lexer.hpp:95
Definition: lexer.hpp:60
Token::Token_type lex_keyword_or_ident(const char *s)
Definition: lexer.cpp:235
Lexer(const char *file_name, Stateomat const &stateomat, shptr< ErrorReporter > errorReporter)
Definition: lexer.cpp:169
Definition: lexer.hpp:90
Definition: lexer.hpp:88
Token_type
Definition: token.hpp:21
Definition: lexer.hpp:80
static Token::Token_type kw_array[]
Definition: lexer.hpp:116
int c
Definition: lexer.hpp:27
Definition: lexer.hpp:74
Definition: lexer.hpp:103
Token get_next_token()
Definition: lexer.cpp:274
size_t buf_len
Definition: lexer.hpp:40
Definition: lexer.hpp:68
size_t buf_off
Definition: lexer.hpp:39
source_position_t position
Definition: lexer.hpp:17
static std::vector< std::pair< const char *, Token::Token_type > > kw_vector
Definition: lexer.hpp:121
std::shared_ptr< T > shptr
Definition: globals.hpp:7
Stateomat stateomat
Definition: lexer.hpp:19
Definition: lexer.hpp:105
Definition: lexer.hpp:102
Definition: lexer.hpp:84
Definition: lexer.hpp:83
Definition: lexer.hpp:70
Definition: lexer.hpp:64
Definition: lexer.hpp:93
Definition: lexer.hpp:78
Definition: lexer.hpp:65
off_t line_start
Definition: lexer.hpp:42
Definition: lexer.hpp:96
Definition: lexer.hpp:59
Definition: lexer.hpp:99
Definition: lexer.hpp:79
Definition: lexer.hpp:81
Definition: lexer.hpp:106
Definition: lexer.hpp:86
Definition: lexer.hpp:97
Definition: lexer.hpp:92
Definition: lexer.hpp:87
Definition: lexer.hpp:108
Definition: stateomat.hpp:17
Definition: lexer.hpp:85
static const int kw_lex_table[][26]
Definition: lexer.hpp:124
Definition: lexer.hpp:58
bool good() const
Definition: lexer.cpp:369
Definition: lexer.hpp:91
int fd
Definition: lexer.hpp:32
Definition: lexer.hpp:61
Definition: lexer.hpp:67
void advancePosition(int nextCharacter)
Definition: lexer.cpp:194
Definition: lexer.hpp:71
Definition: lexer.hpp:107
Definition: lexer.hpp:104
std::string describe(Token::Token_type const &t) const
Definition: lexer.cpp:359
Definition: lexer.hpp:66
char buf[BUF_SIZE]
Definition: lexer.hpp:38
#define BUF_SIZE
Definition: lexer.hpp:30
Definition: lexer.hpp:82
Definition: lexer.hpp:98
Definition: lexer.hpp:110
Definition: lexer.hpp:72
Definition: lexer.hpp:94
kw_states
Definition: lexer.hpp:55
Definition: lexer.hpp:76
Definition: lexer.hpp:77