if (alts > 5) {Indent(indent); gen.println("case (t.kind)");}
if (alts > 5) {Indent(indent); gen.println("case (@t.kind)");}
    private static void GenCode (int p, int indent, BitSet checked) {	GraphNode n, n2;	BitSet s1, s2;	boolean equal;	int alts, p2;	Symbol sym;	while (p > 0) {	    n = Tab.Node(p);	    switch (n.typ) {	    case Tab.nt: {		Indent(indent);		sym = Tab.Sym(n.p1);		if (n.retVar!=null) gen.print(n.retVar + " = ");		gen.print(sym.name + "(");		CopySourcePart(n.pos, 0);		gen.println(")");		break;	    }	    case Tab.t: {		Indent(indent);		if (checked.get(n.p1)) gen.println("Get()");		else gen.println("Expect(" + n.p1 + ")");		break;	    }	    case Tab.wt: {		Indent(indent);		s1 = Tab.Expected(Math.abs(n.next), curSy);		s1.or(Tab.Set(0));		gen.println("ExpectWeak(" + n.p1 + ", " + NewCondSet(s1) + ")");		break;	    }	    case Tab.any: {		Indent(indent);		gen.println("Get()");		break;	    }	    case Tab.eps: break; // nothing	    case Tab.sem: {		CopySourcePart(n.pos, indent);		break;	    }	    case Tab.sync: {		Indent(indent);		GenErrorMsg(syncErr, curSy);		s1 = (BitSet) Tab.Set(n.p1).clone();		gen.print("while (!("); GenCond(s1);		gen.println(")); Error(" + errorNr + "); Get(); end");		break;	    }	    case Tab.alt: {		s1 = Tab.First(p); equal = s1.equals(checked);		alts = Alternatives(p);		if (alts > 5) {Indent(indent); gen.println("case (t.kind)");}		p2 = p;		while (p2 != 0) {		    n2 = Tab.Node(p2);		    s1 = Tab.Expected(n2.p1, curSy);		    Indent(indent);		    if (alts > 5) {			PutCaseLabels(s1); gen.println();		    } else if (p2==p) {			gen.print("if ("); GenCond(s1); gen.println(") then");		    } else if (n2.p2==0 && equal) {			gen.println("else");		    } else {			gen.print("elsif ("); GenCond(s1); gen.println(") then");		    }		    s1.or(checked);		    GenCode(n2.p1, indent + 1, s1);		    /*		    if (alts > 5) {			Indent(indent); gen.println();			Indent(indent); gen.println("end");		    }		    */		    p2 = n2.p2;		}		Indent(indent);		if (equal) gen.println("end");		else {		    GenErrorMsg(altErr, curSy);		    if (alts > 5) {			gen.println("else");			gen.println("  Error(" + errorNr + ")");			Indent(indent); gen.println("end");		    } else {			gen.println("else Error(" + errorNr + ")");			gen.println("end");		    }		}		break;	    }	    case Tab.iter: {		Indent(indent);		n2 = Tab.Node(n.p1);		gen.print("while (");		if (n2.typ==Tab.wt) {		    s1 = Tab.Expected(Math.abs(n2.next), curSy);		    s2 = Tab.Expected(Math.abs(n.next), curSy);		    gen.print("WeakSeparator(" + n2.p1 + "," + NewCondSet(s1) + ","			      + NewCondSet(s2) + ") ");		    s1 = new BitSet(); // for inner structure		    if (n2.next > 0) p2 = n2.next; else p2 = 0;		} else {		    p2 = n.p1; s1 = Tab.First(p2); GenCond(s1);		}		gen.println(")");		GenCode(p2, indent + 1, s1);		Indent(indent); gen.println("end");		break;	    }	    case Tab.opt:		s1 = Tab.First(n.p1);		if (!checked.equals(s1)) {		    Indent(indent);		    gen.print("if ("); GenCond(s1); gen.println(") then");		    GenCode(n.p1, indent+1, s1);		    Indent(indent); gen.println("end");		} else GenCode(n.p1, indent, checked);		break;	    }	    if (n.typ!=Tab.eps && n.typ!=Tab.sem && n.typ!=Tab.sync) checked = new BitSet();	    p = n.next;	}    }