Most computer languages use the concept of reserved words, and in this case I think it would simplify your grammar a lot if labels and opcodes were distinct. Here is one way to do it that I adapted from an answer in
this mailing list thread (I haven't tried it).
opcode: IF | YMOVE | XMOVE | DOWN |
UP | PRINTLOC | GOTO |
SET | ADD | SUB | HALT
label: ...!opcode /[a-z]\w*/i