Ejemplo n.º 1
0
Archivo: mono.c Proyecto: kmizumar/Mono
int read(void){
    gettoken();
    switch(stok.type){
        case NUMBER:    return(makenum(atoi(stok.buf)));
        case SYMBOL:    return(makesym(stok.buf));
        case QUOTE:             return(cons(makesym("quote"), cons(read(),makeempty())));
        case LPAREN:    return(readlist());
    }
}
Ejemplo n.º 2
0
int read(void){
    gettoken();
    switch(stok.type){
    	case NUMBER:	return(makenum(atoi(stok.buf)));
        case SYMBOL:	return(makesym(stok.buf));
        case QUOTE:		return(cons(makesym("quote"), cons(read(),makeNIL())));
        case LPAREN:	return(readlist());
    }
    error(CANT_READ_ERR,"read",NIL);
}
Ejemplo n.º 3
0
Archivo: mlis.c Proyecto: kzfm1024/misc
//-----------------------------
void initcell(void){
    int addr;
    
    for(addr=0; addr < HEAPSIZE; addr++){
        heap[addr].flag = FRE;
        heap[addr].cdr = addr+1;
    }
    hp = 0;
    fc = HEAPSIZE;
    
    //0番地はnil、環境レジスタを設定する。初期環境
    ep = makesym("nil");
    assocsym(makesym("nil"),NIL);
    assocsym(makesym("t"),makesym("t"));
    
    sp = 0;
    ap = 0;
}
Ejemplo n.º 4
0
Archivo: mlis.c Proyecto: kzfm1024/misc
void bindfunc1(char *name, int addr){
    int sym,val;
    
    sym = makesym(name);
    val = freshcell();
    SET_TAG(val,FUNC);
    SET_BIND(val,addr);
    SET_CDR(val,0);
    bindsym(sym,val);
}
Ejemplo n.º 5
0
Archivo: mlis.c Proyecto: kzfm1024/misc
void bindfunc(char *name, tag tag, int(*func)(int)){
    int sym,val;
    
    sym = makesym(name);
    val = freshcell();
    SET_TAG(val,tag);
    SET_SUBR(val,func);
    SET_CDR(val,0);
    bindsym(sym,val);
}
Ejemplo n.º 6
0
Archivo: mono.c Proyecto: kmizumar/Mono
int f_oblist(int arglist){
        int addr,addr1,res;
    
    res = makeempty();
    addr = E;
    while(addr != 0){
        addr1 = makesym(symname(addr));
        res = cons(addr1,res);
        addr = cdr(addr);
    }
        return(res);
}
Ejemplo n.º 7
0
void bindfunc(char *name, tag tag, int func){
	int sym,val;
	
    sym = makesym(name);
	val = freshcell();
    SET_TAG(val,tag);
    switch(tag){
    	case SUBR:
        case FSUBR:		SET_SUBR(val,func); break;
        case LAMBDA:	SET_BIND(val,func); break;
    }
    SET_CDR(val,0);
    bindsym(sym,val);
}
Ejemplo n.º 8
0
AMODE *set_symbol(char *name, int flag)
{
    SYM *sp;
    AMODE *ap;
    sp = gsearch(name);
    if (sp == 0)
    {
        ++global_flag;
        sp = makesym(flag ? sc_externalfunc : sc_external);
        sp->tp = &stdfunc;
        sp->name = name;
        sp->extflag = 1;
        insert(sp, gsyms);
        --global_flag;
    }
    ap = xalloc(sizeof(AMODE));
    ap->mode = am_immed;
    ap->length = BESZ_DWORD;
    ap->offset = makenode(en_nacon, sp, 0);
    return ap;
}