+ bool require_digit = false;
+ if(iter!=source_end && (*iter=='e' || *iter=='E'))
+ {
+ number += *iter++;
+ if(iter!=source_end && (*iter=='-' || *iter=='+'))
+ number += *iter++;
+ require_digit = true;
+ while(iter!=source_end)
+ {
+ if(isdigit(*iter))
+ {
+ number += *iter++;
+ require_digit = false;
+ }
+ else
+ break;
+ }
+ }
+
+ if(require_digit)
+ throw syntax_error(location, number, "Incomplete numeric literal");
+ else if(isalnum(*iter) || *iter=='_')
+ throw syntax_error(location, number, "Garbage at end of numeric literal");
+