diff options
Diffstat (limited to 'rust/src/lambda.rs')
| -rw-r--r-- | rust/src/lambda.rs | 36 |
1 files changed, 9 insertions, 27 deletions
diff --git a/rust/src/lambda.rs b/rust/src/lambda.rs index 8c4c640..18568d7 100644 --- a/rust/src/lambda.rs +++ b/rust/src/lambda.rs @@ -1,7 +1,10 @@ -use std::{ - fmt::{self, Display}, - fs::read_to_string, -}; +use std::fs::read_to_string; + +mod ast; +use ast::*; + +mod parser; +use parser::*; pub fn run(arg: &str) -> String { let content = read_to_string(arg).unwrap(); @@ -10,30 +13,9 @@ pub fn run(arg: &str) -> String { result.to_string() } -#[derive(Debug, PartialEq)] -pub enum Value { - Num(i32), - Bool(bool), - Sym(String), -} - -impl Display for Value { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Value::Num(i) => write!(f, "{}", i), - Value::Bool(b) => write!(f, "{}", b), - Value::Sym(s) => write!(f, "{}", s), - } - } -} - fn interpret(arg: &str) -> Value { - let token = arg.trim(); - token - .parse::<i32>() - .map(Value::Num) - .or(token.parse::<bool>().map(Value::Bool)) - .unwrap_or(Value::Sym(token.to_string())) + // interpreting a value is the value itself + parse(arg) } #[cfg(test)] |
