예제 #1
0
파일: parse.c 프로젝트: TidyHuang/vizgems
static int pexpi (int k) {
    int ei0, ei1, ei2, ptok;

    if (lextab[k][0] == 0)
        return pexp5 ();

    if ((ei0 = pexpi (k + 1)) == -1) {
        SUwarning (0, "pexpi", "cannot create first expression");
        return -1;
    }
    while ((ptok = getop (EEltok, k)) != -1) {
        if ((ei1 = EEcnew (ptok)) == -1) {
            SUwarning (0, "pexpi", "cannot create code");
            return -1;
        }
        EEcsetfp (ei1, ei0);
        EElgtok ();
        if ((ei2 = pexpi (k + 1)) == -1) {
            SUwarning (0, "pexpi", "cannot create next expression");
            return -1;
        }
        EEcsetnext (ei0, ei2);
        ei0 = ei1;
    }
    return ei0;
}
예제 #2
0
파일: jsdump.c 프로젝트: UIKit0/mujs
static void pobject(int d, js_Ast *list)
{
	ps("{");
	while (list) {
		js_Ast *kv = list->a;
		assert(list->type == AST_LIST);
		switch (kv->type) {
		case EXP_PROP_VAL:
			pexpi(d, COMMA, kv->a);
			ps(": ");
			pexpi(d, COMMA, kv->b);
			break;
		case EXP_PROP_GET:
			ps("get ");
			pexpi(d, COMMA, kv->a);
			ps("() {\n");
			pstmlist(d, kv->c);
			in(d); ps("}");
			break;
		case EXP_PROP_SET:
			ps("set ");
			pexpi(d, COMMA, kv->a);
			ps("(");
			pargs(d, kv->b);
			ps(") {\n");
			pstmlist(d, kv->c);
			in(d); ps("}");
			break;
		}
		list = list->b;
		if (list)
			ps(", ");
	}
	ps("}");
}
예제 #3
0
static int ptcons (void) {
    int ti, ei0, ei1;

    ti = Cnew (C_TCONS);
    Lgtok ();
    if (Ltok == L_RB) {
        Csetfp (ti, C_NULL);
        Lgtok ();
        return ti;
    }
    ei1 = pexpi (0);
    Csetfp (ti, ei1);
    ei0 = ei1;
    GTOKIFEQ (L_ASSIGN);
    ei1 = pexpr ();
    Csetnext (ei0, ei1);
    ei0 = ei1;
    GTOKIFEQ (L_SEMI);
    while (Ltok != L_RB) {
        ei1 = pexpi (0);
        Csetnext (ei0, ei1);
        ei0 = ei1;
        GTOKIFEQ (L_ASSIGN);
        ei1 = pexpr ();
        Csetnext (ei0, ei1);
        ei0 = ei1;
        GTOKIFEQ (L_SEMI);
    }
    Lgtok ();
    return ti;
}
예제 #4
0
static int pexpi (int k) {
    int ei0, ei1, ei2, ptok;

    if (lextab[k][0] == 0)
        return pexp5 ();

    ei0 = pexpi (k + 1);
    while ((ptok = getop (Ltok, k)) != -1) {
        ei1 = Cnew (ptok);
        Csetfp (ei1, ei0);
        Lgtok ();
        ei2 = pexpi (k + 1);
        Csetnext (ei0, ei2);
        ei0 = ei1;
    }
    return ei0;
}
예제 #5
0
파일: jsdump.c 프로젝트: UIKit0/mujs
static void pargs(int d, js_Ast *list)
{
	while (list) {
		assert(list->type == AST_LIST);
		pexpi(d, COMMA, list->a);
		list = list->b;
		if (list)
			ps(", ");
	}
}
예제 #6
0
static int pexpr (void) {
    int ai, ei0, ei1;

    ei0 = pexpi (0);
    if (Ltok != C_ASSIGN)
        return ei0;

    ai = Cnew (C_ASSIGN);
    Csetfp (ai, ei0);
    Lgtok ();
    ei1 = pexpr ();
    Csetnext (ei0, ei1);
    return ai;
}
예제 #7
0
파일: parse.c 프로젝트: TidyHuang/vizgems
static int pexpr (void) {
    int ai, ei0, ei1;

    if ((ei0 = pexpi (0)) == -1) {
        SUwarning (0, "pexpr", "cannot create lhs expression");
        return -1;
    }
    if (EEltok != C_ASSIGN)
        return ei0;

    if ((ai = EEcnew (C_ASSIGN)) == -1) {
        SUwarning (0, "pexpr", "cannot create rhs code");
        return -1;
    }
    EEcsetfp (ai, ei0);
    EElgtok ();
    if ((ei1 = pexpr ()) == -1) {
        SUwarning (0, "pexpr", "cannot create rhs expression");
        return -1;
    }
    EEcsetnext (ei0, ei1);
    return ai;
}