This commit is contained in:
2026-05-19 00:40:28 +02:00
parent 6b314dabf4
commit 5e8946a126
3 changed files with 47 additions and 0 deletions
+1
View File
@@ -4,6 +4,7 @@ use pest_derive::Parser;
pub mod ast; pub mod ast;
pub mod error; pub mod error;
pub mod parser; pub mod parser;
pub mod rev_mapper;
use ast::*; use ast::*;
+9
View File
@@ -0,0 +1,9 @@
WHITESPACE = _{ " " | "\t" | "\r" | "\n" }
integer = @{ ASCII_DIGIT+ }
map = { "/*" ~ integer ~ ":" ~ integer ~ "*/" }
non_map = { (!map ~ ANY)+ }
mapping = { map | non_map }
+37
View File
@@ -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
}