User blog comment:Alemagno12/Ordinals in programming languages part 1: Brainfuck/@comment-1605058-20170323212550

Your description of how [ and ] work does not match with how it works in real BF. First of all, [ isn't "do nothing". It's "do nothing unless there is a zero under the pointer, in that case, skip to the matching ]". So for example, if you have instruction [+>], then in the end nothing happens, because the cell under the pointer has a 0 and thus the whole bracket is ignored.

Also, when we meet a ] and the value read is nonzero, we don't skip to the rightmost bracket to the left. Instead, we are moving to the matching [ - look, for example, at [+[-]<], and suppose we are reading a nonzero value while the program is at the rightmost character. Then we won't skip to the second [, but rather to the first [, since this is the one that's matching.