use nom::IResult;
use nom::branch::alt;
use nom::character::complete::{char, one_of};
use nom::combinator::{opt, recognize};
use nom::multi::{many0, many1};
use nom::sequence::{preceded, terminated, tuple};
fn decimal(input: &str) -> IResult<&str, &str> {
recognize(many1(terminated(one_of("0123456789"), many0(char('_')))))(input)
}
pub fn parse_number_literal(input: &str) -> IResult<&str, &str> {
alt((
recognize(tuple((
char('.'),
decimal,
opt(tuple((one_of("eE"), opt(one_of("+-")), decimal))),
))),
recognize(tuple((
decimal,
opt(preceded(char('.'), decimal)),
one_of("eE"),
opt(one_of("+-")),
decimal,
))),
recognize(tuple((decimal, char('.'), opt(decimal)))),
decimal,
))(input)
}