1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
#include "Parser.ih"
// Lexical scanner returns a double floating point
// number on the stack and the token NUM, or the ASCII
// character read if not a number. Skips all blanks
// and tabs, returns 0 for EOF.
int Parser::lex()
{
char c;
// get the next non-ws character
while (std::cin.get(c) && (c == ' ' || c == '\t'))
;
if (!std::cin) // no characters were obtained
return 0; // indicate End Of Input
if (c == '.' || isdigit(c)) // if a digit char was found
{
std::cin.putback(c); // return the character
std::cin >> d_val_; // extract a number
return NUM; // return the NUM token
}
return c; // otherwise return the extracted char.
}
|