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);
}
Example #2
0
// <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();
}