public static void iExist() { SAR top_sar = SAS.Pop(); if (top_sar.value == "this") { SAS.Push(top_sar); return; } string args = ""; if (top_sar.argList.Count != 0) { args = top_sar.argList[0]; for (int i = 1; i < top_sar.argList.Count; ++i) { args += "," + top_sar.argList[i]; } } top_sar.paramType = args; string symid = SymbolTable.iExists(top_sar); if (symid == null || !SymbolTable.ContainsSymid(symid)) { SemanticError(top_sar); } Symbol symbol = SymbolTable.GetValue(symid); if (symbol.data != null) { top_sar.dataType = symbol.data[0].Split(':')[1]; top_sar.dataType.Trim(); } top_sar.paramType = symbol.parameters; top_sar.symid = symbol.symid; if (symbol.kind == "method") { ICode.FRAME(symbol.symid, "this"); if (symbol.parameters != null && symbol.parameters != "") { for (int i = 0; i < top_sar.argList.Count; ++i) { ICode.PUSH(top_sar.argList[i]); } } ICode.CALL(symbol.symid); Symbol temp = new Symbol("t", "t" + uniqueCounter++, "t_" + symbol.value + "_ReturnValue", "tvar", symbol.data); SymbolTable.Add(temp); top_sar.symid = temp.symid; if (symbol.data[0].Split(':')[1] != "void" && symbol.data[0].Split(':')[1] != "null") { ICode.PEEK(temp.symid); } } SAS.Push(top_sar); }