void Statement(out Operand st) { Operand op1 = null, op2 = null, op3 = null; Operand st1 = null, st2 = null; st = null; if (la.kind == 7) { Get(); Block(out op1); Expect(59); } else if (la.kind == 20) { Get(); Expression(out op1); env.codeGen.While(op1); Expect(7); Block(out st1); Expect(59); } else if (la.kind == 18) { Get(); env.codeGen.Do(); Block(out st1); Expect(60); Expression(out op1); env.codeGen.WhileNeg(op1); } else if (la.kind == 13) { Get(); Expression(out op1); Expect(61); env.codeGen.If(op1); Block(out st1); while (la.kind == 9) { Get(); Expression(out op2); env.codeGen.Else(); env.codeGen.If(op2); Expect(61); Block(out st2); } if (la.kind == 8) { Get(); env.codeGen.Else(); Block(out st2); } Expect(59); } else if (la.kind == 11) { Get(); NameList(out op1); if (la.kind == 23) { Get(); Expression(out op2); Expect(25); Expression(out op3); if (la.kind == 25) { Get(); Expression(out st1); } env.codeGen.For(op1, op2, op3, st1); Expect(7); Block(out st2); Expect(59); } else if (la.kind == 14) { Get(); ExprList(out op2); env.codeGen.ForEach(op1, op2); Expect(7); Block(out st1); Expect(59); } else { SynErr(75); } } else if (la.kind == 12) { Get(); FuncName(out op1); FuncBody(op1); } else if (la.kind == 15) { Get(); if (la.kind == 12) { Get(); Name(out op1); FuncBody(op1); } else if (la.kind == 1) { NameList(out op1); if (la.kind == 23) { Get(); if (StartOf(3)) { ExprList(out op2); if (env.codeGen.IsScoped) { env.codeGen.Emit(ListOfOperands.ToOperand(op1, op2, true)); env.codeGen.End(); } else { env.AddFieldWithInitializer(op1, op2); } } else if (la.kind == 62) { Get(); if (la.kind == 36) { Get(); } if (la.kind == 4) { Get(); } else if (la.kind == 5) { Get(); } else { SynErr(76); } env.AddDependency(op1.ToString(), t.val); if (la.kind == 52) { Get(); } env.AddField(op1.ToString()); } else { SynErr(77); } } } else { SynErr(78); } } else if (la.kind == 62) { Get(); if (la.kind == 4) { Get(); } else if (la.kind == 5) { Get(); } else { SynErr(79); } env.AddDependency(t.val); } else if (StartOf(3)) { ExprList(out op1); env.codeGen.Emit(op1); env.codeGen.End(); } else { SynErr(80); } }