void StereotypeDefinitionParser::expectColon() { expectOperator(OPERATOR_COLON, QStringLiteral(":")); }
AST* Parser::expression(int pri, Scope* ps) { Position begin = lex_->peek().range_.begin_; if (pri > 11) { if (expect("delete") || expect("++") || expect("--")) { Token op = lex_->get(); AST* expr = leftExpression(ps); Position end = lex_->peek().range_.begin_; auto ret = new UniExpression(PositionRange(begin, end), op, expr); ret->scope_ = ps; return ret; } else if (expect("void") || expect("typeof") || expect("+") || expect("-") || expect("~") || expect("!")) { Token op = lex_->get(); AST* expr = expression(pri, ps); Position end = lex_->peek().range_.begin_; auto ret = new UniExpression(PositionRange(begin, end), op, expr); ret->scope_ = ps; return ret; } else { AST* expr = leftExpression(ps); if (expect("++") || expect("--")) { Token op = lex_->get(); Position end = lex_->peek().range_.begin_; auto ret = new UniExpression(PositionRange(begin, end), expr, op); ret->scope_ = ps; return ret; } return expr; } } AST* left = expression(pri+1, ps); if (!expectOperator(pri)) { return left; } Token op = lex_->get(); if (pri == 1) { AST* first = expression(pri, ps); match(":"); AST* second = expression(pri, ps); Position end = lex_->peek().range_.begin_; auto ret = new TriExpression(PositionRange(begin, end), left, first, second); ret->scope_ = ps; return ret; } AST* right = expression(pri, ps); Position end = lex_->peek().range_.begin_; AST* ret = new BiExpression(PositionRange(begin, end), left, op, right); ret->scope_ = ps; while (expectOperator(pri)) { op = lex_->get(); right = expression(pri+1, ps); ret = new BiExpression(PositionRange(begin, end), left, op, right); ret->scope_ = ps; } return ret; }
void StereotypeDefinitionParser::expectComma() { expectOperator(OPERATOR_COMMA, QStringLiteral(",")); }