Lisp Interpreter for mbed LPC1768
Lisp Interpreter
(Marc Adler Lisp Interpreter, malisp)
mbed LPC1768 port by Takehisa Oneta (ohneta@gmail.com)
malisp.h
- Committer:
- ohneta
- Date:
- 2016-04-17
- Revision:
- 0:e9a7a38d9ad3
- Child:
- 1:a2955606adef
File content as of revision 0:e9a7a38d9ad3:
/** * */ #ifndef MALISP_H #define MALISP_H #define FALSE 0 #define TRUE 1 // input types #define INQUOTE 1 #define LPAREN 2 #define RPAREN 3 #define LETTER 4 #define DIGIT 5 // token types #define IATOM 6 #define RATOM 7 #define SATOM 8 #define FUNC 9 #define LST 10 #define VARI 11 #define QUOTE 12 #define NILL 13 #define T 14 #define COND 15 #define DEFUN 16 #define FCAR 17 #define FCDR 18 #define FCONS 19 #define FEQ 20 #define FATOM 21 #define FQUOTE 22 #define FSETQ 23 #define FUSER 24 #define PLUS 25 #define DIFF 26 #define TIMES 27 #define QUOTIENT 28 #define ADD1 29 #define SUB1 30 #define ZEROP 31 #define NUMBERP 32 #define GREATERP 33 #define LESSP 34 #define PRINT 35 #define NUL 36 #define FUNCALL 37 #define PROG 38 #define GO 39 #define RETRN 40 #define LABL 41 #define FREAD 42 #define FREPLACA 43 #define FREPLACD 44 #define FEVAL 45 #define FAPPLY 46 /* // for garbage collection #define GARBAGE 47 #define USED 48 #define RUNNING 49 */ #define GARBAGE 0 #define USED 1 #define RUNNING 2 // more primitives #define FAND 50 #define FOR 51 #define FNOT 52 #define FLIST 53 #define ERR -2 // mbed extpand functions #define FINFO 55 #define FFREEMEM 59 #define FWAIT 60 #define FDOUT 61 #define FDIN 62 #define FAOUT 63 #define FAIN 64 #define PWMOUT 65 typedef struct LIST { //uint32_t cons_num; //char gcbit; uint32_t gcbit; int32_t htype; union { float num; char *pname; } u; struct LIST *left; struct LIST *right; } LIST; #define FILE_MINE int32_t #define FILE_SERIAL 2 #define FILE_STRING 3 // Prototypes int getc_mine(FILE_MINE fd); void ungetc_mine(int c, FILE_MINE fd); size_t _getFreeMemorySize(); LIST *memfreesize(); void malisp_main(); void interpret_malisp(); void initialize(); LIST *init(char *name, int t); LIST *makelist(); void lisp_print(LIST *p); LIST *eval(LIST *x, LIST *alist); LIST *evalcond(LIST *expr, LIST *alist); LIST *evalprog(LIST *p, LIST *alist); LIST *pairargs(LIST *params, LIST *args, LIST *alist, int prog); LIST *evalargs(LIST *arglist, LIST *alist); LIST *assoc( LIST *alist, char *name); LIST *getvar(LIST *alist, char *name); LIST *arith(LIST *op, LIST *x, LIST *y); int advance(); LIST *lookup(LIST *head, char *name); //LIST *install(char *name); LIST *install(char *name, int nameConstKind); LIST *getnum(); LIST *getid(); int gettok(); LIST *new_malisp(); int type(LIST *p); char* getname(LIST *p); void rplaca(LIST *p, LIST *q); void rplacd(LIST *p, LIST *q); void rplact( LIST *p, int t); LIST *car(LIST *p); LIST *cdr(LIST *p); LIST *cons(LIST *p, LIST *q); LIST *eq(LIST *x, LIST *y); LIST *atom(LIST *x); LIST *_and(LIST *x); LIST *_or(LIST *x); LIST *_not(LIST *x); LIST *_list(LIST *x); void var_to_user(LIST *p); void var_to_atom(LIST *p); void find_labels(LIST *p); void work_garbageCollect(LIST *); // for work void marktree(LIST *p); void *emalloc(size_t size); void load_library(); int isfunc(int t); void debug(LIST *p); void debug2(LIST *p); #endif