From 387959675cd53b3c75ad9b6215b07843f8c8f1d8 Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Tue, 11 May 2021 13:53:56 +0100 Subject: Rename autochomp to autonibble. --- autonibble/src/main.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 autonibble/src/main.rs (limited to 'autonibble/src/main.rs') diff --git a/autonibble/src/main.rs b/autonibble/src/main.rs new file mode 100644 index 0000000..56c757d --- /dev/null +++ b/autonibble/src/main.rs @@ -0,0 +1,61 @@ +use std::{ + error::Error, + io::{self, Read, Write}, + process::exit, +}; + +use chewed::{IterWrapper, Parser}; +use chomp::{ + chomp::{ + ast::substitute::Reduce, + typed::{ + context::Context, + lower::{Backend, GenerateCode}, + TypeInfer, + }, + visit::Visitable, + }, + lower::RustBackend, + nibble::convert::{self, Convert}, +}; +use proc_macro2::Span; + +fn main() { + let mut input = String::new(); + let res = io::stdin() + .read_to_string(&mut input) + .map_err(|e| Box::new(e) as Box) + .and_then(|_| { + IterWrapper::new(input.chars()) + .parse::() + .map_err(|e| Box::new(e) as Box) + }) + .and_then(|ast| { + ast.convert(&mut convert::Context::default()) + .map_err(|e| Box::new(e) as Box) + }) + .and_then(|expr| { + expr.fold(&mut Reduce) + .map_err(|e| Box::new(e) as Box) + }) + .and_then(|term| { + let mut context = Context::default(); + term.fold(&mut TypeInfer { + context: &mut context, + }) + .map_err(|e| Box::new(e) as Box) + }) + .map(|typed| { + let mut backend = RustBackend::default(); + let id = typed.gen(&mut backend); + backend.emit_code(None, Span::call_site(), id) + }) + .and_then(|code| { + write!(io::stdout(), "{:#}", code).map_err(|e| Box::new(e) as Box) + }); + + if let Err(e) = res { + eprintln!("{}", e); + exit(1) + } +} -- cgit v1.2.3