void OutParam(out Expression exp)
 {
     exp = null;
     if (la.kind == 1) {
     Get();
     exp = new PLRString(t.val);
     } else if (StartOf(2)) {
     Expression(out exp);
     } else SynErr(32);
 }
 void InOrReadParam(out Expression exp)
 {
     exp = null;
     if (la.kind == 1) {
     Get();
     exp = new PLRString(t.val); SetPos(exp, t);
     } else if (la.kind == 3) {
     Get();
     exp = new VariableBinding(t.val.Replace("!", "")); SetPos(exp, t);
     } else if (StartOf(2)) {
     Expression(out exp);
     } else SynErr(33);
 }
 void CallParam(out Expression exp)
 {
     Expression aexp = null; exp = null;
     if (StartOf(2)) {
     ArithmeticExpression(out aexp);
     exp = aexp;
     } else if (la.kind == 8) {
     Get();
     exp = new PLRString(t.val.Substring(1, t.val.Length-2)); SetPos(exp, t);
     } else SynErr(46);
 }
 public virtual void Visit(PLRString node)
 {
 }
 public override void Visit(PLRString node)
 {
     PopChildren();
     if (PLRString.DisplayWithoutQuotes) {
         Return(node.Value);
     } else {
         Return("\"" + node.Value + "\"");
     }
 }