| 155 | pos.col -= 1; |
| 156 | } |
| 157 | void TokenStream::read() |
| 158 | { |
| 159 | char ch; |
| 160 | // Skip any leading space and delim characters |
| 161 | do |
| 162 | { |
| 163 | // Reached eof |
| 164 | if (!_istream.get(ch)) |
| 165 | { |
| 166 | if (!reached_end()) |
| 167 | { |
| 168 | _tokens.emplace_back(TokenType::End, "", _lookahead_pos); |
| 169 | } |
| 170 | return; |
| 171 | } |
| 172 | advance(_lookahead_pos, ch); |
| 173 | } while (std::isspace(ch) || is_delim(ch)); |
| 174 | // Read chars until we hit a delim or eof |
| 175 | auto orig_pos = _lookahead_pos; |
| 176 | auto tok = recognize_tok(ch); |
| 177 | rewind(orig_pos); |
| 178 | tok.pos = orig_pos; |
| 179 | // Trim leading and trailing white spaces |
| 180 | trim(tok.value); |
| 181 | _tokens.push_back(tok); |
| 182 | } |
| 183 | |
| 184 | Token TokenStream::recognize_tok(char ch) |
| 185 | { |
no test coverage detected