number ~ sign_maybe digit_many e | sign_maybe digit_any '.' digit_many e_maybe | sign_maybe digit_many e_maybe | sign_maybe non_zero digit_any empty ~ sign_maybe ~ [+-] | empty digit ~ [0-9] non_zero ~ [1-9] digit_any ~ digit* digit_many ~ digit+ e ~ [Ee] sign_maybe digit_many e_maybe ~ e | empty