void UnaryMinusTerm(out Expression aexp)
 {
     bool isMinus = false; Token minusToken = null; aexp = null;
     if (la.kind == 36) {
     Get();
     isMinus = true; minusToken = t;
     }
     switch (la.kind) {
     case 10: {
     Get();
     ArithmeticExpression(out aexp);
     Expect(12);
     aexp.ParenCount += 1;
     break;
     }
     case 7: {
     Get();
     aexp = new Number(int.Parse(t.val)); SetPos(aexp, t);
     break;
     }
     case 17: {
     Get();
     aexp = new Number(int.Parse(t.val)); SetPos(aexp, t);
     break;
     }
     case 39: {
     Get();
     aexp = new Bool(true); SetPos(aexp, t);
     break;
     }
     case 40: {
     Get();
     aexp = new Bool(false); SetPos(aexp, t);
     break;
     }
     case 3: {
     Get();
     aexp = new Variable(t.val); SetPos(aexp, t);
     break;
     }
     case 6: {
     MethodCall(out aexp, false);
     break;
     }
     default: SynErr(47); break;
     }
     if (isMinus) {aexp = new UnaryMinus(aexp); SetStartPos(aexp, minusToken); SetEndPos(aexp, t);}
 }
 public virtual void Visit(Bool node)
 {
 }
 public override void Visit(Bool node)
 {
     PopChildren();
     Return(node.Value ? "true" : "false");
 }