|
|
- static char* lispy_version = "Lispy version 0.0.0.0.5";
-
-
- /* Parser language defintion */
- static char* parser =
- " \
- number : /-?[0-9]+([.][0-9]*|[0-9]*)/ ; \
- symbol : '+' | '-' | '*' | '/' | '%' | '^' | \
- \"min\" | \"max\" ; \
- sexpr : '(' <expr>* ')' ; \
- expr : <number> | <symbol> | <sexpr> ; \
- lispy : /^/ <expr>* /$/ ; \
- ";
-
-
- /* Declare new lval struct */
- typedef struct lval {
- int type;
- long num;
- double dec;
- /* Error & symbol types have some string data */
- char* err;
- char* sym;
- /* Counter & pointer to a list of lval */
- size_t count;
- struct lval** cell;
- } lval;
-
-
- /* Create enumeration of possible lval types */
- enum {LVAL_NUM, LVAL_DEC, LVAL_SYM, LVAL_SEXPR, LVAL_ERR};
-
- /* lval constructor functions */
- lval* lval_num(long x);
- lval* lval_dec(double x);
- lval* lval_err(char* m);
- lval* lval_sym(char* s);
- lval* lval_sexpr(void);
-
- /* lval destructor function */
- void lval_del(lval* v);
-
- /* lval manipulating functions */
- lval* lval_add(lval* v, lval* x);
- lval* lval_pop(lval* v, size_t i);
- lval* lval_take(lval* v, size_t i);
-
- lval* lval_read_num(mpc_ast_t* t);
- lval* lval_read(mpc_ast_t* t);
- lval* lval_eval_sexpr(lval* v);
- lval* lval_eval(lval* v);
-
- void lval_expr_print(lval* v, char open, char close);
- void lval_print(lval* v);
- void lval_println(lval* v);
-
- long min(long x, long y);
- long max(long x, long y);
-
- lval* builtin_op(lval* a, char* op);
|