docs: def next_lookup(self, symbol):
          """Returns the next TerminalSymbols produced by the input symbol within this grammar definition"""
          result = []
          if symbol == self.initialsymbol:
              result.append(EndSymbol())
          for production in self.productions:
              if symbol in production.rightside:
                  nextindex = production.rightside.index(symbol) + 1
                  while nextindex < len(production.rightside):
                      nextsymbol = production.rightside[nextindex]
                      firstlist = self.first_lookup(nextsymbol)
                      cleanfirstlist = Choice([x for x in firstlist if x != NullSymbol()])
                      result.append(cleanfirstlist)
                      if NullSymbol() not in firstlist:
                          break
                  else:
                      result += self.next_lookup(production.leftside[0]) #reached the end of the rightside
          return result