Подумайте еще раз о том, что вы спрашиваете: «какие функции должен обеспечить лексер»
То, что ему «нужно», зависит, конечно, от того, что вам нужно, а не от того, что ему нужно. Мы, вероятно, сможем оказать вам лучшую помощь, если вы объясните свои собственные потребности. Но, в любом случае, вот вам выстрел:
Минимальная функция будет состоять из одной функции, которая принимает строку в качестве аргумента и возвращает список строк (или итератор над строками, если вы хотите быть необычным и отложенным). Этого достаточно для многих сценариев использования и, следовательно, это то, что "нужно" лексеру.
Более описательный может возвращать более сложные объекты, чем строки, содержащие дополнительную информацию о каждом токене (например, о его положении в исходной строке, так что вы сможете сообщить бедному программисту о синтаксических ошибках в его код, где он должен смотреть). Вы, вероятно, можете придумать множество метаданных для добавления, кроме номеров строк, но, опять же, все зависит от ваших потребностей.