Expression* parseTernary(TokenStream* tokens, FileContext* fileContext) { Expression* expression = parseInequality(tokens, fileContext); if (tokens->safePeekValue() == "?") { Token questionToken = tokens->pop(); Expression* trueExpression = parseTernary(tokens, fileContext); tokens->popExpected(":"); Expression* falseExpression = parseTernary(tokens, fileContext); expression = new Ternary(expression, questionToken, trueExpression, falseExpression, fileContext); } return expression; }
bool parseConstrs(B& in, S& solver) { vec<Lit> ps; vec<Int> Cs; vec<char> tmp; int ineq; Int rhs; while (*in != EOF){ parseExpr(in, solver, ps, Cs, tmp); ineq = parseInequality(in); rhs = parseInt(in); skipWhitespace(in); if (!skipText(in, ";")) throw xstrdup("Expecting ';' after constraint."); skipEndOfLine(in); if (!solver.addConstr(ps, Cs, rhs, ineq)) return false; ps.clear(); Cs.clear(); } return true; }