A virtual machine for parsing expression grammars