+ long double value = integer_part;
+ long double factor = 1.;
+
+ while(c >= '0' && c <= '9') {
+ factor *= 0.1;
+ value += (c - '0') * factor;
+ next_char();
+ }
+
+ if(c == 'e' || c == 'E') {
+ next_char();
+ parse_floatingpoint_exponent(value);
+ return;
+ }
+
+ lexer_token.type = T_FLOATINGPOINT;
+ lexer_token.v.floatvalue = value;
+
+ parse_floating_suffix();
+}
+
+static void parse_number_dec(void)
+{
+ int value = 0;
+
+ while(isdigit(c)) {
+ value = 10 * value + c - '0';
+ next_char();
+ }
+
+ if(c == '.') {
+ next_char();
+ parse_floatingpoint_fract(value);
+ return;
+ }
+ if(c == 'e' || c == 'E') {
+ next_char();
+ parse_floatingpoint_exponent(value);
+ return;
+ }
+ parse_integer_suffix();
+
+ lexer_token.type = T_INTEGER;
+ lexer_token.v.intvalue = value;
+}