enum ParseState
{
INIT,
- NEGATIVE,
+ SIGN,
+ FLOATEXPINIT,
+ FLOATEXPSIGN,
STRING,
ACCEPT,
ZERO,
HEXADECIMAL,
OCTAL,
FLOAT,
+ FLOATEXP,
IDENTIFIER
};
static Token::Type token_type[]=
{
+ Token::SPECIAL,
+ Token::SPECIAL,
Token::SPECIAL,
Token::SPECIAL,
Token::STRING,
Token::INTEGER,
Token::INTEGER,
Token::FLOAT,
+ Token::FLOAT,
Token::IDENTIFIER
};
case INIT:
if(c=='0')
state=ZERO;
- else if(c=='-')
- state=NEGATIVE;
+ else if(c=='-' || c=='+')
+ state=SIGN;
else if(c=='.')
state=FLOAT;
else if(c=='"')
parse_error(c, state);
break;
- case NEGATIVE:
+ case SIGN:
if(c=='0')
state=ZERO;
else if(isdigit(c))
break;
case FLOAT:
+ if(c=='e' || c=='E')
+ state=FLOATEXPINIT;
+ else if(!isdigit(c))
+ parse_error(c, state);
+ break;
+
+ case FLOATEXPINIT:
+ if(c=='+' || c=='-')
+ state=FLOATEXPSIGN;
+ else if(isdigit(c))
+ state=FLOATEXP;
+ else
+ parse_error(c, state);
+ break;
+
+ case FLOATEXPSIGN:
+ if(isdigit(c))
+ state=FLOATEXP;
+ else
+ parse_error(c, state);
+ break;
+
+ case FLOATEXP:
if(!isdigit(c))
parse_error(c, state);
break;