Good tutorial Nick, but there is a small flaw in your example parser
if you receive <43-21> what will be the number? -4321? [case can happen when 2 chars "><" are lost due to buffer overrun whatever]
To solve this the parser need to check that the '-' sign comes directly after the '<' start char.