Nameless to Brainf**k converter This is inspired by the Brainf*** to tinyBF converter challenge.

Brainf**k (which will be henceforth referred to as BF) is a well-known estoric programming language, so I won't go over it too much here.

Nameless language is a binary-looking version of BF. See the linked page for more info.

Your challenge is to implement a golfed Nameless-to-BF converter. It should implement all of the commands except for 1100 (which isn't really possible to implement in BF) and 1010 (that isn't really possible, either). Any characters other than 1's and 0's should be ignored because they can be used for comments (after all, you wouldn't want an unreadable program, right? ;).

Here's a simple table of a Nameless -> BF mapping:

0000 -&gt; &gt;
0001 -&gt; &lt;
0010 -&gt; +
0011 -&gt; -
0100 -&gt; .
0101 -&gt; ,
0110 -&gt; [
0111 -&gt; ]
1011 -&gt; [-]
1000 -&gt; adds the base 10 value of the next command to the current memory cell (see below)
1001 -&gt; subtracts the base 10 value of the next command from the current memory cell (see below)


NOTE: I accidentally flipped &lt; and &gt;. Thanks to @IlmariKaronen for pointing that out.

For 1000 and 1001, you can directly implement it in the translator. For instance, this:

1000 0010


could be written as:

++


The translator determined the value of the next command in advance and wrote it out.

Invalid sequences (e.g. 1111) and the presence of 1000/1001 at the end of the program are undefined; you don't have to handle them.

MAY THE GOLFING BEGIN!!!
CJam, 58 bytes

q{As#)},:~4/2fb{(:X8&lt;"&gt;&lt;+-.,[]"X={XA&lt;{("+-"X=*}"[-]"?}?o}h


Try it online.

Explanation

q               "Read the input.";
{As#)},         "Remove any extraneous characters (not '0' or '1').";
:~              "Evaluate each character ('0' -&gt; 0, '1' -&gt; 1).";
4/2fb           "Split into groups of 4 (Nameless commands) and numerically
                 evaluate each group as an array of binary digits.";
{               "While command values remain:";
  (:X             "Grab the next command value.";
  8&lt;              "If the command value is less than 8:";
  "&gt;&lt;+-.,[]"X=    "Then: It maps directly to a BF command. Look it up.";
  {               "Else:";
    XA&lt;             "If the command value is less than 10:";
    {("+-"X=*}      "Then: It is 8 or 9. Grab the next command value and
                     produce a string of that many copies of '+' if the former
                     command value is 8, or '-' if it is 9.";
    "[-]"?          "Else: It is 11. Produce its translation, '[-]'.";
  }?
  o               "Output the BF translation.";
}h