private ASMOclAny exp(StackFrame frame, ASMTuple args) throws IOException { ASMOclAny ret = null; Token t = null; t = next(); if (t.type == Token.LPAREN) { ret = exp(frame, args); match(Token.RPAREN); return ret; } else if ((t.type == Token.STRING) || (t.type == Token.INT)) { ret = convValue(t); } else { unread(t); ret = simpleExp(frame, args); } t = next(); if (t.type == Token.PLUS) { ASMOclAny right = exp(frame, args); if (right == null) { ret = null; } else if (ret instanceof ASMInteger) { ret = ASMInteger.operatorPlus(frame, (ASMInteger) ret, (ASMInteger) right); } else if (ret instanceof ASMString) { if (right instanceof ASMString) { ret = ASMString.operatorPlus(frame, (ASMString) ret, (ASMString) right); } else { ret = ASMString.operatorPlus(frame, (ASMString) ret, new ASMString(right.toString())); } } else { System.out.println("ERROR: could not add type " + ASMOclAny.oclType(frame, ret) + "."); } } else { unread(t); } return ret; }