diff --git a/README.md b/README.md index 6ec9d26..fb70f12 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ Hello, World! ``` ## Progress: -- [X] Lexer & Parser -- [ ] Syntax checker & Type checker -- [ ] Interpreter -- [X] Compiler +TODO: +- Quote, Quasiquote, etc. +- Optimizing diff --git a/blspc/src/compiler/compile.rs b/blspc/src/compiler/compile.rs index 4bacdc8..64d26eb 100644 --- a/blspc/src/compiler/compile.rs +++ b/blspc/src/compiler/compile.rs @@ -46,12 +46,7 @@ impl Compiler { for c in cdr { result.append(&mut self.compile(c, depth + 1)?); } - } - "list" => { - let mut joined = Vec::new(); - for c in cdr { joined.push(c); } - result.append(&mut self.compile_quoted(&joined)?); - } + }, "if" => { // TODO: Remove .clone() let mut cond = self.compile(cdr[0].clone(), depth + 1)?; @@ -211,40 +206,4 @@ impl Compiler { Ok(result) } - - fn compile_quoted(&mut self, atom: &Vec) -> Result, String> { - let mut result = Vec::new(); - - // Vec -> Vec - let mut types = Vec::new(); - for a in atom { - types.push(sexpr_to_type(a)?); - } - - result.push(Instr::Push { - value: Type::Array(types), - label: self.next_label(), - }); - - Ok(result) - } -} - -fn sexpr_to_type(sexpr: &Sexpr) -> Result { - match sexpr { - Int(i) => Ok(Type::Int(*i)), - Float(f) => Ok(Type::Float(*f)), - Str(s) => Ok(Type::String(s.clone())), - Boolean(b) => Ok(Type::Boolean(*b)), - Symbol(s) => Ok(Type::String(s.to_string())), - Cons(car, cdr) => { - let mut array = Vec::new(); - array.push(sexpr_to_type(car)?); - for item in cdr { - array.push(sexpr_to_type(item)?); - } - Ok(Type::Array(array)) - }, - _ => unimplemented!(), - } } \ No newline at end of file diff --git a/blspc/src/compiler/parser.rs b/blspc/src/compiler/parser.rs index 82ea29b..97bbf24 100644 --- a/blspc/src/compiler/parser.rs +++ b/blspc/src/compiler/parser.rs @@ -58,7 +58,8 @@ impl Parser { match self.peek() { Some(s) => match s.as_str() { ")" => Err(format!("Unexpected ')' at position {}", self.position)), - "'" => { self.next(); self.parse_quote_sequence(")")}, + // TODO: Handle quote and that stuff. + "'" => { unimplemented!() }, "(" => self.parse_sequence(")"), _ => self.parse_atom(), } diff --git a/example/hello.blsp b/example/hello.blsp index 89d01f8..0ae84b3 100644 --- a/example/hello.blsp +++ b/example/hello.blsp @@ -1 +1 @@ -(print "Hello, hello world!") \ No newline at end of file +(print "Hello, world!") \ No newline at end of file