aboutsummaryrefslogtreecommitdiff
path: root/src/lisp/mod.rs
diff options
context:
space:
mode:
authorAkshay <[email protected]>2021-03-19 16:27:34 +0000
committerAkshay <[email protected]>2021-03-19 16:27:34 +0000
commitae79d5a8b0166d43d3ff48aa593db6038b40410b (patch)
treead61f60b4e19f9701823bb6968973fb55939d098 /src/lisp/mod.rs
parent149bc3627b886c306a877ac802c62089714326eb (diff)
begin work on scripting lisp
Diffstat (limited to 'src/lisp/mod.rs')
-rw-r--r--src/lisp/mod.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lisp/mod.rs b/src/lisp/mod.rs
new file mode 100644
index 0000000..5d8965f
--- /dev/null
+++ b/src/lisp/mod.rs
@@ -0,0 +1,46 @@
1use std::fmt;
2
3use number::LispNumber;
4
5mod error;
6mod lex;
7mod number;
8
9#[derive(Debug, PartialEq)]
10pub enum LispExpr {
11 Number(LispNumber),
12 List(Vec<LispExpr>),
13 StringLit(String),
14 BoolLit(bool),
15 Ident(String),
16 Function(LispFunction),
17}
18
19impl fmt::Display for LispExpr {
20 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
21 match self {
22 LispExpr::Number(n) => write!(f, "{}", n)?,
23 LispExpr::List(l) => {
24 for expr in l.iter() {
25 write!(f, " {} ", expr)?
26 }
27 }
28 LispExpr::StringLit(s) => write!(f, "{:?}", s)?,
29 LispExpr::BoolLit(b) => {
30 if *b {
31 write!(f, "#t")?
32 } else {
33 write!(f, "#f")?
34 }
35 }
36 LispExpr::Ident(s) => write!(f, "{}", s)?,
37 LispExpr::Function(_) => write!(f, "<#procedure>")?,
38 };
39 Ok(())
40 }
41}
42
43pub type Environment = Vec<(String, LispExpr)>;
44
45#[derive(Debug, PartialEq)]
46struct LispFunction {}