Lisp Interpreter for mbed LPC1768

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers malisp.h Source File

malisp.h

00001 /**
00002  *
00003  */
00004 
00005 #ifndef MALISP_H
00006 #define MALISP_H
00007 
00008 
00009 #define FALSE   0
00010 #define TRUE    1
00011 
00012 // input types
00013 #define INQUOTE 1
00014 #define LPAREN  2
00015 #define RPAREN  3
00016 #define LETTER  4
00017 #define DIGIT   5
00018 
00019 
00020 // token types
00021 #define IATOM   6       // 整数ATOM
00022 #define RATOM   7       // 実数ATOM (float)
00023 #define SATOM   8       // 文字列ATOM
00024 #define FUNC    9       // 関数
00025 #define LST     10      // リスト
00026 #define VARI    11      // 変数
00027 #define QUOTE   12      // クオート
00028 #define NILL    13      // nil
00029 #define T       14      // t
00030 #define COND    15
00031 #define DEFUN   16
00032 #define FCAR    17
00033 #define FCDR    18
00034 #define FCONS   19
00035 #define FEQ     20
00036 #define FATOM   21
00037 #define FQUOTE  22
00038 #define FSETQ   23
00039 #define FUSER   24
00040 #define PLUS    25
00041 #define DIFF    26
00042 #define TIMES   27
00043 #define QUOTIENT    28
00044 #define ADD1    29
00045 #define SUB1    30
00046 #define ZEROP   31
00047 #define NUMBERP 32
00048 #define GREATERP    33
00049 #define LESSP   34
00050 #define PRINT   35
00051 #define NUL     36
00052 #define FUNCALL 37
00053 #define PROG    38
00054 #define GO      39
00055 #define RETRN   40
00056 #define LABL    41
00057 #define FREAD   42
00058 #define FREPLACA    43
00059 #define FREPLACD    44
00060 #define FEVAL   45
00061 #define FAPPLY  46
00062 
00063 /*
00064 // for garbage collection
00065 #define GARBAGE 47
00066 #define USED    48
00067 #define RUNNING 49
00068 */
00069 #define GARBAGE 0
00070 #define USED    1
00071 #define RUNNING 2
00072 
00073 
00074 // more primitives
00075 #define FAND    50
00076 #define FOR     51
00077 #define FNOT    52
00078 #define FLIST   53
00079 
00080 #define ERR     -2
00081 
00082 // mbed extpand functions
00083 #define FINFO       55
00084 #define FFREEMEM    59
00085 #define FWAIT       60
00086 #define FDOUT       61
00087 #define FDIN        62
00088 #define FAOUT       63
00089 #define FAIN        64
00090 #define PWMOUT      65
00091 
00092 
00093 typedef struct LIST {
00094 
00095     uint32_t  gcbit;
00096 
00097     int32_t   htype;
00098     union {
00099         float num;
00100         char  *pname;
00101     } u;
00102     struct LIST  *left;
00103     struct LIST  *right;
00104 } LIST;
00105 
00106 
00107 
00108 #define     FILE_MINE   int32_t
00109 #define     FILE_SERIAL     2
00110 #define     FILE_STRING     3
00111 
00112 
00113 
00114 // Prototypes
00115 int getc_mine(FILE_MINE fd);
00116 void ungetc_mine(int c, FILE_MINE fd);
00117 
00118 size_t _getFreeMemorySize();
00119 LIST *memfreesize();
00120 
00121 
00122 void malisp_main();
00123 void interpret_malisp();
00124 
00125 void initialize();
00126 LIST *init(char *name, int t);
00127 
00128 LIST *makelist();
00129 void lisp_print(LIST *p);
00130 LIST *eval(LIST *x, LIST *alist);
00131 LIST *evalcond(LIST *expr, LIST *alist);
00132 LIST *evalprog(LIST *p, LIST *alist);
00133 LIST *pairargs(LIST *params, LIST *args, LIST *alist, int prog);
00134 LIST *evalargs(LIST *arglist, LIST *alist);
00135 LIST *assoc( LIST *alist, char *name);
00136 LIST *getvar(LIST *alist, char *name);
00137 LIST *arith(LIST *op, LIST *x, LIST *y);
00138 int advance();
00139 LIST *lookup(LIST *head, char *name);
00140 //LIST *install(char *name);
00141 //LIST *install(char *name, int nameConstKind);
00142 LIST *install(char *name, bool nameCopyFlag);
00143 
00144 LIST *getnum();
00145 LIST *getid();
00146 int gettok();
00147 LIST *new_malisp();
00148 int type(LIST *p);
00149 char* getname(LIST *p);
00150 void rplaca(LIST *p, LIST *q);
00151 void rplacd(LIST *p, LIST *q);
00152 void rplact( LIST *p, int t);
00153 LIST *car(LIST *p);
00154 LIST *cdr(LIST *p);
00155 LIST *cons(LIST *p, LIST *q);
00156 LIST *eq(LIST *x, LIST *y);
00157 LIST *atom(LIST *x);
00158 LIST *_and(LIST *x);
00159 LIST *_or(LIST *x);
00160 LIST *_not(LIST *x);
00161 LIST *_list(LIST *x);
00162 void var_to_user(LIST *p);
00163 void var_to_atom(LIST *p);
00164 void find_labels(LIST *p);
00165 
00166 void work_garbageCollect(LIST *);   // for work
00167 void marktree(LIST *p);
00168 void *emalloc(size_t size);
00169 
00170 void load_library();
00171 int isfunc(int t);
00172 void debug(LIST *p);
00173 void debug2(LIST *p);
00174 
00175 #endif