From d575adf63b7e87196b636ee91061692a685b605f Mon Sep 17 00:00:00 2001 From: Minijackson Date: Sun, 2 Sep 2018 16:04:22 +0200 Subject: First working version --- src/parsing/equalizer_apo.lalrpop | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/parsing/equalizer_apo.lalrpop (limited to 'src/parsing/equalizer_apo.lalrpop') diff --git a/src/parsing/equalizer_apo.lalrpop b/src/parsing/equalizer_apo.lalrpop new file mode 100644 index 0000000..b1faad9 --- /dev/null +++ b/src/parsing/equalizer_apo.lalrpop @@ -0,0 +1,42 @@ +use ::Filter; + +use std::str::FromStr; + +grammar; + +pub Main: Filter = { + => { + let coefficients: Vec<_> = eq.1.iter().map(|decibel| 10f64.powf(decibel / 10f64)).collect(); + // TODO: add decibel_to_ratio conversion function + let preamp = 10f64.powf(preamp / 10f64); + Filter { preamp, frequencies: eq.0, coefficients } + } +} + +Preamp: f64 = { + "Preamp:" +} + +Eq: (Vec, Vec) = { + "GraphicEQ:" ";")+> => { + let mut values = values; + values.push(end); + values.into_iter().unzip() + } +} + +Decibel: f64 = { + "dB" +} + +Float: f64 = { + , + => <> as f64, + => <> as f64, +} + +RawFloat: f64 = r"-?[0-9]*\.[0-9]+" => f64::from_str(<>).unwrap(); +SignedInteger: i32 = r"-[0-9]+" => i32::from_str(<>).unwrap(); +Integer: u32 = r"[0-9]+"=> u32::from_str(<>).unwrap(); + +// vim: ft=rust -- cgit v1.2.3