void Action(out Action act)
 {
     act = null; Expression exp = null;Variable v = null;
     if (la.kind == 3) {
     Get();
     InAction inAct = new InAction(t.val);
     if (la.kind == 10) {
         Get();
         Expect(3);
         v = new Variable(t.val); SetPos(v, t); inAct.AddVariable(v);
         while (la.kind == 11) {
             Get();
             Expect(3);
             v = new Variable(t.val); SetPos(v, t); inAct.AddVariable(v);
         }
         Expect(12);
     }
     act = inAct;
     } else if (la.kind == 5) {
     Get();
     OutAction outAct = new OutAction(t.val);
     if (la.kind == 10) {
         Get();
         ArithmeticExpression(out exp);
         outAct.AddExpression(exp);
         while (la.kind == 11) {
             Get();
             ArithmeticExpression(out exp);
             outAct.AddExpression(exp);
         }
         Expect(12);
     }
     act = outAct;
     } else if (la.kind == 6) {
     MethodCall(out exp, true);
     act = new Call((MethodCallExpression)exp);
     } else SynErr(43);
 }
 public virtual void Visit(Call call)
 {
 }
 //Actions
 public override void Visit(Call call)
 {
     Return(PopChildren()[0]);
 }