Lisp Interpreter in C
Program constructs a grammar for a Lisp language variant and parses the input based on that grammar. On startup, a Lisp standard library is passed in, allowing for better ease of use (more shorthand syntax for declaring functions, etc.).
Syntax table:
Symbol | Input type | Example input | Example output |
---|---|---|---|
!= | Num | != 2 3 | 1 |
* | Num | * 2 5 | 10 |
+ | Num | + 7 8 | 15 |
- | Num | - 5 2 | 3 |
/ | Num | / 8 2 | 4 |
< | Num | < 10 5 | 0 |
<= | Num | <= 10 10 | 1 |
== | Num | == 2 3 | 0 |
> | Num | > 10 5 | 1 |
>= | Num | >= 2 3 | 0 |
Q-Expr | def {add} ( {x y} {+ x y}) | () | |
def | Q-Expr | def {x} {10} | () |
eval | Q-Expr | eval {head (list 1 2 3 4)} | 1 |
head | Q-Expr | head {1 2 3 5} | 1 |
tail | Q-Expr | tail {1 2 3 5} | 5 |
if | 1 S-Expr, 2 Q-Expr | if (== 2 1) {+ 10 5} {* 10 5} | 50 |
join | Q-Expr | join {1 2} {7 8} | {1 2 7 8} |
list | Sym/Num | list 1 2 3 | {1 2 3} |
Tech:
Language : C
Library : mpc parser combinator library