+ while(c >= '0' && c <= '7') {
+ value = 8 * value + c - '0';
+ next_char();
+ }
+ if (c == '8' || c == '9') {
+ parse_error("invalid octal number");
+ lexer_token.type = T_ERROR;
+ return;
+ }
+
+ lexer_token.type = T_INTEGER;
+ lexer_token.v.intvalue = value;
+
+ parse_integer_suffix();
+}
+
+static void parse_floatingpoint_exponent(long double value)
+{
+ unsigned int expo = 0;
+ long double factor = 10.;
+
+ if(c == '-') {
+ next_char();
+ factor = 0.1;
+ } else if(c == '+') {
+ next_char();
+ }
+
+ while(c >= '0' && c <= '9') {
+ expo = 10 * expo + (c - '0');
+ next_char();
+ }
+