return token_type::identifier;
}
- // Number: [0-9.]+
+ // Number: [0-9]+([.][0-9]*(eE[+-][0-9]+)*)*
if (isdigit(c) || c == '.') {
str = "";
do {
str += c;
c = input->get();
} while (isdigit(c) || c == '.');
+ if (c == 'E' || c == 'e') {
+ str += 'E';
+ c = input->get();
+ if (isdigit(c))
+ str += '+';
+ do {
+ str += c;
+ c = input->get();
+ } while (isdigit(c));
+ }
return token_type::number;
}
input = in;
line_num = 0;
column = 0;
+ c = ' ';
+}
+
+/// Symbolic name of current token (for error reporting)
+std::string lexer::tok2str(const int tok) const
+{
+ switch (tok) {
+ case lexer::token_type::identifier:
+ case lexer::token_type::number:
+ return std::string("\"") + str + "\"";
+ case lexer::token_type::eof:
+ return std::string("EOF");
+ default:
+ return std::string("\"") + char(tok) + "\"";
+ }
}
} // namespace GiNaC