def insert(self, state, token):
        """change internal state, return action"""
        if token == EndSymbol():
            return self[state][EndSymbol()]
        from pydsl.check import check
        symbol_list = [x for x in self[state] if isinstance(x, TerminalSymbol) and check(x.gd, [token])]
        if not symbol_list:
            return {"action":"Fail"}
        if len(symbol_list) > 1:
            raise Exception("Multiple symbols matches input")
        symbol = symbol_list[0]
        return self[state][symbol]
change internal state, return action