void postfix(void)
{
	char symbol;
	precedence token;
	int n=0;
	int top=0;
	stack[0]=eos;
	for(token=get_token(&symbol,&n);token!=eos;token=get_token(&symbol,&n))
	{
		if(token==operand)
			printf("%c",symbol);
		else if(token==rparen)
		{
			while(stack[top]!=lparen)
				printtoken(pop(&top));
		}
		else
		{


			if (isp(&stack[top])>=isp(&token))
				printtoken(pop(&top));
			push(&top,token);
		}
	}
	while((token=pop(&top))!=eos)
		printtoken(token);
}
Exemple #2
0
void skipto(int tok, char set[])
{
    int n;
    char *s;

    assert(set);
    for (n = 0; t != EOI && t != tok; t = gettok()) {
        for (s = set; *s && kind[t] != *s; s++)
            ;
        if (kind[t] == *s)
            break;
        if (n++ == 0)
            error("skipping");
        if (n <= 8)
            printtoken();
        else if (n == 9)
            fprint(stderr, " ...");
    }
    if (n > 8) {
        fprint(stderr, " up to");
        printtoken();
    }
    if (n > 0)
        fprint(stderr, "\n");
}
Exemple #3
0
void expect(int tok) {
	if (t == tok)
		t = gettok();
	else {
		error("syntax error; found");
		printtoken();
		fprint(stderr, " expecting `%k'\n", tok);
	}
}
Exemple #4
0
void printexprnode(const char *s, exprnode list)
{
    printf("%s", s);
    while (list) {
        if (list->is_float
            && list->tok.type != TOK_FLOAT
            && list->tok.type != TOK_TOFLOAT)
            printf(".");
        printtoken(&list->tok);
        if (list->tok.type == TOK_VAR) {
            if (list->history_index < 0)
                printf("{%d}", list->history_index);
            if (list->vector_index > -1)
                printf("[%d]", list->vector_index);
        }
        list = list->next;
        if (list) printf(" ");
    }
}
Exemple #5
0
static struct zastoken *
zasprocinst(struct zastoken *token, zasmemadr_t adr,
            zasmemadr_t *retadr)
{
#if (WPM)
    struct wpmopcode *op = NULL;
#elif (ZEN)
    struct zpuop     *op = NULL;
#endif
#if (WPMVEC)
    struct vecopcode *vop = NULL;
#endif
    zasmemadr_t       opadr = rounduppow2(adr, 4);
    struct zastoken  *token1 = NULL;
    struct zastoken  *token2 = NULL;
    struct zastoken  *retval = NULL;
    struct zassymrec *sym;
    uint8_t           narg = token->data.inst.narg;
//    uint8_t           len = token->data.inst.op == OPNOP ? 1 : 4;
    uint8_t           len = 4;

    while (adr < opadr) {
#if (WPM)
        physmem[adr] = OPNOP;
#endif
        adr++;
    }
//    adr = opadr;
#if (ZASDB)
    zasaddline(adr, token->data.inst.data, token->file, token->line);
#endif
#if (WPMVEC)
    if (token->unit == UNIT_VEC) {
        vop = (struct vecopcode *)&zvm.physmem[adr];
        vop->inst = token->data.inst.op;
        vop->unit = UNIT_VEC;
        vop->flg = token->opflg;
        token1 = token->next;
        zasfreetoken(token);
        if (token1) {
            switch(token1->type) {
                case ZASTOKENVAREG:
                    vop->arg1t = ARGVAREG;
                    vop->reg1 = token1->data.reg & 0xff;
                    
                    break;
                case ZASTOKENVLREG:
                    vop->arg1t = ARGVLREG;
                    vop->reg1 = token1->data.reg & 0xff;
                    
                    break;
                case ZASTOKENIMMED:
                    vop->arg1t = ARGIMMED;
                    vop->args[0] = token1->val;
                    len += sizeof(zasword_t);
                    
                    break;
                case ZASTOKENADR:
                    vop->arg1t = ARGIMMED;
                    sym = malloc(sizeof(struct zassymrec));
                    sym->name = (uint8_t *)strdup((char *)token1->data.sym.name);
                    sym->adr = (uintptr_t)&op->args[0];
                    zasqueuesym(sym);
                    len += sizeof(uintptr_t);
                    
                    break;
                default:
                    fprintf(stderr, "invalid argument 1 of type %lx\n", token1->type);
                    printtoken(token1);
                    
                    exit(1);
                    
                    break;
            }
            token2 = token1->next;
            zasfreetoken(token1);
            retval = token2;
        }
        vop->narg = len >> 3;
        if (narg == 1) {
            vop->arg2t = ARGNONE;
        } else if (narg == 2 && (token2)) {
            switch(token2->type) {
                case ZASTOKENVAREG:
                    vop->arg2t = ARGVAREG;
                    vop->reg2 = token2->data.reg & 0xff;
                    
                    break;
                case ZASTOKENVLREG:
                    vop->arg2t = ARGVLREG;
                    vop->reg2 = token2->data.reg & 0xff;
                    
                    break;
                default:
                    fprintf(stderr, "invalid argument 2 of type %lx\n", token2->type);
                    printtoken(token2);

                    exit(1);

                    break;
            }
            retval = token2->next;
            zasfreetoken(token2);
        }
    } else
Exemple #6
0
static void
displaysettings(struct termios *m, int all)
{
	const struct key *kbd = keys;
	const struct mode *mod = modes;
	struct winsize winsize;
	speed_t in, out;
	tcflag_t *bitsp, mask;
	const char *linestr;

	in = cfgetispeed(m);
	out = cfgetospeed(m);
	if (!in || in == out) {
		if (all || out != B38400)
			printtoken("speed %s baud;", baudtostr(out));
	} else {
		printtoken("ispeed %s baud;", baudtostr(in));
		printtoken("ospeed %s baud;", baudtostr(out));
	}

	if (all) {
		if (ioctl(STDIN_FILENO, TIOCGWINSZ, &winsize))
			eprintf("TIOCGWINSZ <stdin>:");
		printtoken("rows %u;", winsize.ws_row);
		printtoken("columns %u;", winsize.ws_col);
	}
	printtoken("\n");

	if (all || m->c_line != 0) {
		linestr = linetostr(m->c_line);
		if (linestr)
			printtoken("line = %s;", linestr);
		else
			printtoken("line = %u;", (unsigned)(m->c_line));
	}
	if (all || (m->c_cc[VMIN] != 1 && !(m->c_lflag & ICANON)))
		printtoken("min = %u;", (unsigned)(m->c_cc[VMIN]));
	if (all || (m->c_cc[VTIME] != 0 && !(m->c_lflag & ICANON)))
		printtoken("time = %u;", (unsigned)(m->c_cc[VTIME]));
	printtoken("\n");

	for (; kbd->op; kbd++)
		if (all || m->c_cc[kbd->index] != kbd->sanevalue)
			printtoken("%s = %s;", kbd->op, keytostr(m->c_cc[kbd->index]));
	printtoken("\n");

	for (; mod->op; mod++) {
		switch (mod->type) {
		case CTRL:  bitsp = &m->c_cflag; break;
		case IN:    bitsp = &m->c_iflag; break;
		case OUT:   bitsp = &m->c_oflag; break;
		case LOCAL: bitsp = &m->c_lflag; break;
		default:    bitsp = 0;           break;
		}
		if (!bitsp || (mod->flags & DUP))
			continue;
		mask = mod->clear ? mod->clear : mod->set;
		if ((*bitsp & mask) == mod->set) {
			if (all || !isdefault(mod->flags))
				printtoken("%s", mod->op);
		}
		else if (mod->flags & BOOL) {
			if (all || isdefault(mod->flags))
				printtoken("-%s", mod->op);
		}
	}
	printtoken("\n");
}