void StereotypeDefinitionParser::parseToolbarCommands(Toolbar *toolbar) { Token token; QList<Toolbar::Tool> tools; bool loop = true; while (loop) { token = readNextToken(); if (token.type() != Token::TokenKeyword) { loop = false; } else { switch (token.subtype()) { case KEYWORD_TOOL: { QString toolName = parseStringExpression(); expectComma(); QString element = parseIdentifierExpression(); static QSet<QString> elementNames = QSet<QString>() << QStringLiteral("package") << QStringLiteral("component") << QStringLiteral("class") << QStringLiteral("item") << QStringLiteral("annotation") << QStringLiteral("boundary"); QString elementName = element.toLower(); if (!elementNames.contains(elementName)) throw StereotypeDefinitionParserError(QString(QStringLiteral("Unexpected value \"%1\" for element.")).arg(element), token.sourcePos()); QString stereotype; if (nextIsComma()) stereotype = parseStringExpression(); tools.append(Toolbar::Tool(toolName, element, stereotype)); expectSemicolonOrEndOfLine(); break; } case KEYWORD_SEPARATOR: tools.append(Toolbar::Tool()); expectSemicolonOrEndOfLine(); break; default: loop = false; break; } } } toolbar->setTools(tools); d->m_scanner->unread(token); }
// <primary> ::= <parenexpr> // | <identifier> // | <string> // | <bool> // | <number> IAstExpression *Parser::parsePrimary() { if (_curToken->IsUnaryOperator()) { IAstExpression *unary = parsePrefixUnaryExpr(); if (unary != nullptr) { return unary; } } switch (_curTokenType) { default: return nullptr; case '(': return parseParenExpression(); case ';': next(); return parseExpression(); case tok_identifier: return parseIdentifierExpression(); case tok_string: return parseStringExpression(); case tok_bool: return parseBooleanExpression(); case tok_number: return parseNumberExpression(); } }
QString StereotypeDefinitionParser::parseStringProperty() { expectColon(); return parseStringExpression(); }