From 5e8946a1264624a7dfe2cfe04b595506a55e92c1 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Tue, 19 May 2026 00:40:28 +0200 Subject: [PATCH] Mapping --- parser/src/lib.rs | 1 + parser/src/rev_mapper/grammar.pest | 9 ++++++++ parser/src/rev_mapper/mod.rs | 37 ++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 parser/src/rev_mapper/grammar.pest create mode 100644 parser/src/rev_mapper/mod.rs diff --git a/parser/src/lib.rs b/parser/src/lib.rs index 867c2ef..0a4824c 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -4,6 +4,7 @@ use pest_derive::Parser; pub mod ast; pub mod error; pub mod parser; +pub mod rev_mapper; use ast::*; diff --git a/parser/src/rev_mapper/grammar.pest b/parser/src/rev_mapper/grammar.pest new file mode 100644 index 0000000..bb8ca35 --- /dev/null +++ b/parser/src/rev_mapper/grammar.pest @@ -0,0 +1,9 @@ +WHITESPACE = _{ " " | "\t" | "\r" | "\n" } + +integer = @{ ASCII_DIGIT+ } + +map = { "/*" ~ integer ~ ":" ~ integer ~ "*/" } + +non_map = { (!map ~ ANY)+ } + +mapping = { map | non_map } diff --git a/parser/src/rev_mapper/mod.rs b/parser/src/rev_mapper/mod.rs new file mode 100644 index 0000000..90fc01e --- /dev/null +++ b/parser/src/rev_mapper/mod.rs @@ -0,0 +1,37 @@ +use std::collections::HashSet; + +use pest::Parser; +use pest_derive::Parser; + +#[derive(Parser)] +#[grammar = "./src/rev_mapper/grammar.pest"] +pub struct MistMapperParser; + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +pub struct MistMap(pub usize, pub usize); + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +pub struct RustMap(pub usize, pub usize); + +pub fn get_mapping(input: &str) -> HashSet<(RustMap, MistMap)> { + let mut mapping = HashSet::new(); + + let pairs = MistMapperParser::parse(Rule::mapping, input).unwrap(); + + for pair in pairs { + if pair.as_rule() == Rule::map { + let rs = pair.as_span().start_pos().line_col(); + let mut inner = pair.into_inner(); + + mapping.insert(( + RustMap(rs.0, rs.1), + MistMap( + inner.next().unwrap().as_str().parse().unwrap(), + inner.next().unwrap().as_str().parse().unwrap(), + ), + )); + } + } + + mapping +}