private BaseTypeNode Type() throws SyntaxException {
        boolean constancy = isConstant();
        
        BaseTypeNode type;
        if (iterator.current().type().is(Token.Type.PrimitiveType)) {
            type = PrimitiveType(constancy);
        } else if (iterator.current().type().is(
            new Token.Type[] {
                Token.Type.ASTERISK, 
                Token.Type.LEFT_SQUARE_BRACKET,
                Token.Type.STRUCT, 
                Token.Type.FUNC
            })
        ) {
            type = TypeLit(constancy);
        } else {
            LeftBracket();
            type = Type();
            RightBracket();
        }
        
        return type;
    }