1. finished the sub machine decoding, test fine
2. modify the main loop, change from single char drive to getNextToken() drive. Main reason for this is to accomplish the '|' and '{n,m}' somehow easily and clearly.