Skip to main content

eta_core/
basic.rs

1
2use crate::{human::{Dict, Parser, View}, theory::{Kind, eta, lore, lore_end}};
3use core::fmt::Write;
4
5/* does the basic default */
6pub fn execute<O: Write, I:Iterator<Item = char>>
7(out: &mut O, input: I) {
8    let mut dict = Dict::new();
9
10    let mut prs = Parser::new(input);
11    let inp = match prs.parse_spair(&mut dict) {
12        Ok(k) => k,
13        Err(err) => {
14            let _ = write!(out, "P[!]: {}\n", err);
15            return;
16        }
17    };
18
19    /* check for garbage at the end */
20    if let Ok(at) = prs.has_ended() {
21        let _ = write!(out, "X[!]: garbage after {at} chars\n");
22        return;
23    }
24
25    let mut exp = lore(Kind::from((inp, lore_end())));
26    let _ = write!(out, "I: {}\n", View::new(&exp, &dict));
27
28    match eta(&mut exp) {
29        Ok(res) => { let _ = write!(out, "E[^]: {}\n", View::new(&res, &dict)); }
30        Err(res) => { let _ = write!(out, "E[H]: {}\n", View::new(&res, &dict)); }
31    }
32}