diff options
author | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-05 18:07:50 +0300 |
---|---|---|
committer | Joel Kronqvist <joel.kronqvist@iki.fi> | 2025-08-05 18:07:50 +0300 |
commit | d64165e9e6af92bfe350e5d2cc46545b28dbb5c0 (patch) | |
tree | d7a6abb03a83ad08194b94db7b82a6c5f32b4819 /src/parse | |
parent | 1e712e91edea0735c5eb440af26ac6d4454e70a9 (diff) | |
download | myslip-d64165e9e6af92bfe350e5d2cc46545b28dbb5c0.tar.gz myslip-d64165e9e6af92bfe350e5d2cc46545b28dbb5c0.zip |
Added vectors and tests for their evaluation and typing
Diffstat (limited to 'src/parse')
-rw-r--r-- | src/parse/parsetree.rs | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/src/parse/parsetree.rs b/src/parse/parsetree.rs index 3cdc6fe..13d73ea 100644 --- a/src/parse/parsetree.rs +++ b/src/parse/parsetree.rs @@ -94,25 +94,26 @@ fn tokens_to_ast_inner( loop { elements.push(match current_token { - Some(Num(x)) => Ok(Atom(Int(x))), - Some(Sym(s)) if s == "+" => Ok(Atom(Add)), - Some(Sym(s)) if s == "*" => Ok(Atom(Mul)), - Some(Sym(s)) if s == "/" => Ok(Atom(Div)), - Some(Sym(s)) if s == "-" => Ok(Atom(Sub)), - Some(Sym(s)) if s == ">" => Ok(Atom(Gt)), - Some(Sym(s)) if s == "<" => Ok(Atom(Lt)), - Some(Sym(s)) if s == ">=" => Ok(Atom(Ge)), - Some(Sym(s)) if s == "<=" => Ok(Atom(Le)), - Some(Sym(s)) if s == "=" => Ok(Atom(Eq)), - Some(Sym(s)) if s == "!=" => Ok(Atom(Neq)), - Some(Sym(s)) if s == "and" => Ok(Atom(And)), - Some(Sym(s)) if s == "or" => Ok(Atom(Or)), - Some(Sym(s)) if s == "not" => Ok(Atom(Not)), - Some(Sym(s)) if s == "xor" => Ok(Atom(Xor)), - Some(Sym(s)) if s == "true" => Ok(Atom(True)), - Some(Sym(s)) if s == "false" => Ok(Atom(False)), - Some(Sym(s)) if s == "quote" => Ok(Atom(Quote)), - Some(Sym(s)) => Ok(Atom(Var(s))), + Some(Num(x)) => Ok(Atom(Int(x))), + Some(Sym(s)) if s == "+" => Ok(Atom(Add)), + Some(Sym(s)) if s == "*" => Ok(Atom(Mul)), + Some(Sym(s)) if s == "/" => Ok(Atom(Div)), + Some(Sym(s)) if s == "-" => Ok(Atom(Sub)), + Some(Sym(s)) if s == ">" => Ok(Atom(Gt)), + Some(Sym(s)) if s == "<" => Ok(Atom(Lt)), + Some(Sym(s)) if s == ">=" => Ok(Atom(Ge)), + Some(Sym(s)) if s == "<=" => Ok(Atom(Le)), + Some(Sym(s)) if s == "=" => Ok(Atom(Eq)), + Some(Sym(s)) if s == "!=" => Ok(Atom(Neq)), + Some(Sym(s)) if s == "and" => Ok(Atom(And)), + Some(Sym(s)) if s == "or" => Ok(Atom(Or)), + Some(Sym(s)) if s == "not" => Ok(Atom(Not)), + Some(Sym(s)) if s == "xor" => Ok(Atom(Xor)), + Some(Sym(s)) if s == "true" => Ok(Atom(True)), + Some(Sym(s)) if s == "false" => Ok(Atom(False)), + Some(Sym(s)) if s == "quote" => Ok(Atom(Quote)), + Some(Sym(s)) if s == "vector" => Ok(Atom(Vector)), + Some(Sym(s)) => Ok(Atom(Var(s))), Some(ParClose) => break, Some(ParOpen) => { let subexp = tokens_to_ast_inner( |