Unify number parsing again

This commit is contained in:
Joscha 2021-11-19 21:34:32 +01:00
parent 7ed4ba2372
commit e9cff194d3
2 changed files with 9 additions and 9 deletions

View file

@ -31,6 +31,11 @@ fn fail<S: Into<String>, T>(span: Span, message: S) -> Result<T> {
Err(error(span, message)) Err(error(span, message))
} }
fn parse_number(p: Pair<Rule>) -> i32 {
assert_eq!(p.as_rule(), Rule::number);
p.as_str().parse().unwrap()
}
fn parse_title(p: Pair<Rule>) -> String { fn parse_title(p: Pair<Rule>) -> String {
assert_eq!(p.as_rule(), Rule::title); assert_eq!(p.as_rule(), Rule::title);
let p = p.into_inner().next().unwrap(); let p = p.into_inner().next().unwrap();
@ -112,7 +117,7 @@ fn parse_amount(p: Pair<Rule>) -> Amount {
_ => unreachable!(), _ => unreachable!(),
}) })
} }
Rule::amount_value => value = p.as_str().parse().unwrap(), Rule::number => value = parse_number(p),
_ => unreachable!(), _ => unreachable!(),
} }
} }
@ -270,11 +275,6 @@ fn parse_date_fixed(p: Pair<Rule>) -> Result<DateSpec> {
Ok(spec) Ok(spec)
} }
fn parse_number(p: Pair<Rule>) -> i32 {
assert_eq!(p.as_rule(), Rule::number);
p.as_str().parse().unwrap()
}
fn parse_boolean(p: Pair<Rule>) -> bool { fn parse_boolean(p: Pair<Rule>) -> bool {
assert_eq!(p.as_rule(), Rule::boolean); assert_eq!(p.as_rule(), Rule::boolean);
match p.as_str() { match p.as_str() {

View file

@ -3,6 +3,8 @@ WHITESPACE = _{ !eol ~ WHITE_SPACE }
rest_some = { (!eol ~ ANY)+ } rest_some = { (!eol ~ ANY)+ }
rest_any = { (!eol ~ ANY)* } rest_any = { (!eol ~ ANY)* }
number = @{ ASCII_DIGIT{1,9} } // Fits into an i32
title = { WHITESPACE ~ rest_some ~ eol } title = { WHITESPACE ~ rest_some ~ eol }
year = @{ ASCII_DIGIT{4} } year = @{ ASCII_DIGIT{4} }
@ -18,8 +20,7 @@ time = ${ hour ~ ":" ~ minute }
weekday = { "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun" } weekday = { "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun" }
amount_sign = { "+" | "-" } amount_sign = { "+" | "-" }
amount_value = @{ ASCII_DIGIT{1,9} } // Fits into an i32 amount = { amount_sign? ~ number? }
amount = { amount_sign? ~ amount_value? }
delta_weekdays = { amount ~ weekday } delta_weekdays = { amount ~ weekday }
delta_minutes = { amount ~ "min" } delta_minutes = { amount ~ "min" }
delta_years = { amount ~ "y" } delta_years = { amount ~ "y" }
@ -41,7 +42,6 @@ delta = {
)+ )+
} }
number = @{ ("+" | "-")? ~ ASCII_DIGIT{1,9} } // Fits into an i32
boolean = { "true" | "false" } boolean = { "true" | "false" }
variable = { variable = {
"mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun" "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun"