public override string ToString() { Func <int, string> getp = (i) => { if (list != null && i >= 0 && i < list.Count) { return(list[i].ToString()); } return("?"); }; Func <string> sl = () => { string a = ""; if (list != null) { foreach (var i in list) { a += i.ToString(); } } return(a); }; Func <string> slc = () => { string a = ""; if (list != null) { for (int i = 0; i < list.Count; i++) { if (i != 0) { a += ","; } a += list[i].ToString(); } } return(a); }; Func <string> get2p = () => { return("(" + getp(0) + "," + getp(1) + ")"); }; Func <bool, string> ifstr = (b) => { string d = (b ? "if" : "else if") + getp(0); for (int i = 1; i < list.Count; i++) { d += getp(i); } return(d); }; Func <string> pointstr = () => { //if (list.Count==2) return GetPointerName() + list[0] +"." +list[1]; //return GetPointerName() + "." +sl(); return(GetListElement(0).ToString() + "." + GetListElement(1).ToString()); }; string s = ""; switch (group) { //case GROUP.BEHAVIOUR: s = "behaviour \"" + decname + "\"" + sl(); break; case GROUP.DEC_FUNC: s = "function " + decname + sl(); break; case GROUP.DEC_VAR: s = "var " + decname + sl(); break; case GROUP.BLOCK_M: s = " {" + sl() + "} "; break; case GROUP.BLOCK_C: s = "(" + slc() + ")"; break; case GROUP.BLOCK_L: s = "[" + slc() + "]"; break; //case GROUP.BLOCK_L_CLAMP: s = slc(); break; case GROUP.PROGRAM: s = "<pgm>" + sl() + "</pgm>\n.\n."; break; case GROUP.FUNCTION: s = raw + sl(); break; case GROUP.SENTENCE: s = "`" + sl() + ";"; break; case GROUP.POINTER: s = pointstr(); break; // raw + "." +sl(); break; case GROUP.RETURN: s = raw; break; case GROUP.QUOTE: case GROUP.NAME: s = "\"" + raw + "\""; break; case GROUP.NUMBER: s = "#" + raw; break; case GROUP.SPECIALCHAR: s = "/" + raw + "/"; break; case GROUP.SPECIALWORD: s = "/" + raw + "/"; break; case GROUP.VARIABLE: s = "$" + raw + sl(); break; case GROUP.IF: s = ifstr(true); break; case GROUP.ELSE: s = "else " + getp(0); break; case GROUP.ELSEIF: s = ifstr(false); break; case GROUP.op_Multiply: case GROUP.op_Division: case GROUP.op_Modulus: case GROUP.op_Addition: case GROUP.op_Subtraction: case GROUP.op_Equality: case GROUP.op_LessThan: case GROUP.op_GreaterThan: case GROUP.op_LessThanOrEqual: case GROUP.op_GreaterThanOrEqua: case GROUP.op_Assign: s = group.ToString().Substring(2) + get2p(); break; default: s = "<<" + group.ToString() + ":" + sl() + ">>"; break; } return(s); }