in reply to Help with tweaking Parse::RecDescent grammar

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