aboutsummaryrefslogtreecommitdiff
path: root/src/fexpr/grammar.lalrpop
diff options
context:
space:
mode:
Diffstat (limited to 'src/fexpr/grammar.lalrpop')
-rw-r--r--src/fexpr/grammar.lalrpop62
1 files changed, 46 insertions, 16 deletions
diff --git a/src/fexpr/grammar.lalrpop b/src/fexpr/grammar.lalrpop
index 48349a1..4e6ac89 100644
--- a/src/fexpr/grammar.lalrpop
+++ b/src/fexpr/grammar.lalrpop
@@ -1,5 +1,6 @@
use super::{
FError,
+ FErrorKind,
FightOutcome,
filters,
SearchField,
@@ -76,40 +77,68 @@ PlayerPredicate: Box<dyn filters::player::PlayerFilter> = {
}
Regex: Regex = {
- <s:r#""[^"]*""#> =>? Regex::new(&s[1..s.len() - 1]).map_err(|_| ParseError::User {
- error: FError::InvalidRegex(s.into()),
+ <l:@L> <s:regex> =>? Regex::new(&s[1..s.len() - 1]).map_err(|error| ParseError::User {
+ error: FError {
+ location: l,
+ data: s.to_string(),
+ kind: error.into(),
+ }
}),
- <s:word> =>? Regex::new(s).map_err(|e| ParseError::User {
- error: FError::InvalidRegex(s.into()),
+ <l:@L> <s:word> =>? Regex::new(s).map_err(|error| ParseError::User {
+ error: FError {
+ location: l,
+ data: s.to_string(),
+ kind: error.into(),
+ }
}),
}
FightOutcome: FightOutcome = {
- <word> =>? <>.parse().map_err(|_| ParseError::User {
- error: FError::InvalidFightOutcome(<>.into()),
+ <l:@L> <w:word> =>? w.parse().map_err(|_| ParseError::User {
+ error: FError {
+ location: l,
+ data: w.into(),
+ kind: FErrorKind::InvalidFightOutcome,
+ }
}),
}
Weekday: Weekday = {
- <word> =>? <>.parse().map_err(|_| ParseError::User {
- error: FError::InvalidWeekday(<>.into()),
+ <l:@L> <w:word> =>? w.parse().map_err(|_| ParseError::User {
+ error: FError {
+ location: l,
+ data: w.into(),
+ kind: FErrorKind::InvalidWeekday,
+ }
}),
}
Boss: Boss = {
- <word> =>? <>.parse().map_err(|_| ParseError::User {
- error: FError::InvalidBoss(<>.into()),
+ <l:@L> <w:word> =>? w.parse().map_err(|_| ParseError::User {
+ error: FError {
+ location: l,
+ data: w.into(),
+ kind: FErrorKind::InvalidBoss,
+ }
}),
}
Date: NaiveDateTime = {
- <datetime> =>? NaiveDateTime::parse_from_str(<>, "%Y-%m-%d %H:%M:%S")
- .map_err(|_| ParseError::User {
- error: FError::InvalidTimestamp(<>.into()),
+ <l:@L> <d:datetime> =>? NaiveDateTime::parse_from_str(d, "%Y-%m-%d %H:%M:%S")
+ .map_err(|error| ParseError::User {
+ error: FError {
+ location: l,
+ data: d.into(),
+ kind: error.into(),
+ }
}),
- <date> =>? NaiveDateTime::parse_from_str(&format!("{} 00:00:00", <>), "%Y-%m-%d %H:%M:%S")
- .map_err(|_| ParseError::User {
- error: FError::InvalidTimestamp(<>.into()),
+ <l:@L> <d:date> =>? NaiveDateTime::parse_from_str(&format!("{} 00:00:00", d), "%Y-%m-%d %H:%M:%S")
+ .map_err(|error| ParseError::User {
+ error: FError {
+ location: l,
+ data: d.into(),
+ kind: error.into(),
+ }
}),
}
@@ -131,6 +160,7 @@ match {
r"\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d" => datetime,
r"\d\d\d\d-\d\d-\d\d" => date,
r"\w+" => word,
+ r#""[^"]*""# => regex,
_
}