After RTFM, I've found that terminals whose name begins with underscore are not output to the tree, so I've changed it to:
transition: STATE _ARROW STATE (":" event? GUARD? ACTION?)? "
"
_ARROW: "->" | "-->" | "-left->" | "-right->" | "-up->" | "-down->"
And now it works fine.
Not marking this as an accepted answer because I'm sure someone with more experience could give a better answer.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…