diff options
author | Greg Brown <gmb60@cam.ac.uk> | 2021-01-08 18:01:23 +0000 |
---|---|---|
committer | Greg Brown <gmb60@cam.ac.uk> | 2021-01-08 18:01:23 +0000 |
commit | eda4791472f5bf8daeba342efe97dc0977666613 (patch) | |
tree | cd10f6b19bd0657792dcba21af56dc9c497bd734 | |
parent | 0a837400e0ffa7fca1a1902b34f375d0dc5b5f6b (diff) |
Minor fix-ups to AutoChomp
-rw-r--r-- | autochomp/build.rs | 21 | ||||
-rw-r--r-- | autochomp/src/main.rs | 15 | ||||
-rw-r--r-- | autochomp/src/nibble.nb | 8 |
3 files changed, 29 insertions, 15 deletions
diff --git a/autochomp/build.rs b/autochomp/build.rs index 952d49c..58c12a1 100644 --- a/autochomp/build.rs +++ b/autochomp/build.rs @@ -5,7 +5,7 @@ use std::{ fs, io::{Read, Write}, path::Path, - process::exit, + process::Command, }; use chomp::{ @@ -36,9 +36,13 @@ fn main() { let out_dir = env::var("OUT_DIR").unwrap(); let mut input = String::new(); - let res = fs::File::open(PATH) + + fs::File::open(PATH) .map_err(|e| Box::new(e) as Box<dyn Error>) - .and_then(|mut file| file.read_to_string(&mut input).map_err(|e| Box::new(e) as Box<dyn Error>)) + .and_then(|mut file| { + file.read_to_string(&mut input) + .map_err(|e| Box::new(e) as Box<dyn Error>) + }) .and_then(|_| syn::parse_str(&input).map_err(|e| Box::new(e) as Box<dyn Error>)) .and_then(|nibble: File| nibble.convert().ok_or(Box::new(UndecVar) as Box<dyn Error>)) .and_then(|(funs, goal)| { @@ -64,10 +68,11 @@ fn main() { fs::File::create(Path::new(&out_dir).join("nibble.rs")) .and_then(|mut f| write!(f, "{}", code)) .map_err(|e| Box::new(e) as Box<dyn Error>) - }); + }) + .unwrap(); - if let Err(e) = res { - eprintln!("{}", e); - exit(1) - } + Command::new("rustfmt") + .arg(&format!("{}/nibble.rs", out_dir)) + .status() + .unwrap(); } diff --git a/autochomp/src/main.rs b/autochomp/src/main.rs index 400cc2d..9b3b521 100644 --- a/autochomp/src/main.rs +++ b/autochomp/src/main.rs @@ -1,6 +1,11 @@ -use std::{error::Error, io::{self, Read, Write}, process::exit}; +use std::{ + error::Error, + fs, + io::{self, Read, Write}, + process::exit, +}; -use chewed::Parse; +use chewed::{IterWrapper, Parser}; mod nibble { include!(concat!(env!("OUT_DIR"), "/nibble.rs")); @@ -11,7 +16,11 @@ fn main() { let res = io::stdin() .read_to_string(&mut input) .map_err(|e| Box::new(e) as Box<dyn Error>) - .and_then(|_| nibble::Ast::parse(input.chars().peekable()).map_err(|e| Box::new(e) as Box<dyn Error>)) + .and_then(|_| { + IterWrapper::new(input.chars()) + .parse::<nibble::Ast>() + .map_err(|e| Box::new(e) as Box<dyn Error>) + }) .and_then(|ast| { write!(io::stdout(), "{:?}", ast).map_err(|e| Box::new(e) as Box<dyn Error>) }); diff --git a/autochomp/src/nibble.nb b/autochomp/src/nibble.nb index fed3d46..d454adf 100644 --- a/autochomp/src/nibble.nb +++ b/autochomp/src/nibble.nb @@ -5,8 +5,8 @@ let star_(base, step) = [rec](base | step . rec); let Pattern_Whitespace = "\t"|"\n"|"\x0B"|"\x0c"|"\r"|" "|"\u{85}"|"\u{200e}"|"\u{200f}"|"\u{2028}"|"\u{2029}"; -let digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"; -let oct_digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7"; +let oct_digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" ; +let digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"; let hex_digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F" ; @@ -42,8 +42,8 @@ let literal_char = let ws = plus(Pattern_Whitespace); -let punctuated(x, p) = [rec](x . opt(p . opt(ws) . opt(rec))); -let list(x) = "(" . opt(ws) . punctuated(x, ",") . ")"; +let punctuated(x, p) = [rec](x . opt(p . opt(ws) . rec)); +let list(x) = "(" . opt(ws) . [rec](x . opt("," . opt(ws) . opt(rec))) . ")"; let epsilon = "_"; let ident = XID_Start . star(XID_Continue); |