Что такое парсер и их виды?
Парсер (от англ. parser) - это компьютерная программа или часть программного обеспечения, которая анализирует текстовые данные в соответствии с определенными правилами и создает структуру, которая может быть использована для дальнейшей обработки.

Существует несколько видов парсеров:

1) Регулярные выражения (Regular Expression) парсеры: они ищут в тексте конкретные шаблоны и возвращают соответствующие результаты. Этот тип парсера хорошо подходит для поиска конкретных паттернов, таких как адреса электронной почты или номера телефонов.

2) LL парсеры: они используют контекстно-свободную грамматику и работают с левого на право. Они часто используются в языках программирования для синтаксического анализа и создания дерева синтаксического разбора.

3) LR парсеры: они также используют контекстно-свободную грамматику, но работают с правого на лево. Они также часто используются в языках программирования для синтаксического анализа и создания дерева синтаксического разбора.

4) GLR парсеры: они позволяют работать с неоднозначными грамматиками, что делает их полезными для разбора естественных языков.

5) Лексические анализаторы (Lexical Analyzer) - они разбивают входной поток на лексемы, и затем передают эти лексемы в синтаксический анализатор для дальнейшего разбора.

6) Семантические анализаторы (Semantic Analyzer) - они выполняют анализ смысла программы, обычно после синтаксического анализа, для обнаружения ошибок, таких как несоответствие типов, и выполнения различных оптимизаций.

7) Парсеры на основе статистического анализа (Statistical Parser) - они используют статистические модели, обученные на большом корпусе текстов, для определения вероятности наиболее правильного синтаксического разбора.

8) Анализаторы на основе машинного обучения (Machine Learning Parser) - они используют методы машинного обучения, такие как нейронные сети, для автоматического обучения и используются для решения различных задач, включая синтаксический анализ, распознавание именованных сущностей, классификацию текста и другие.

Кроме того, существуют гибридные парсеры, которые используют несколько подходов для анализа текстовых данных. Например, семантический анализатор может использовать правила грамматики для проверки корректности синтаксического разбора, а также использовать методы машинного обучения для классификации текста и распознавания сущностей.

Выбор подходящего типа парсера зависит от типа анализируемых данных и целей анализа.
Напиши мне функцию на python для парсинга адресов электронной почты из текста. Пусть функция называется parse_email_adresses, принимает аргумент типа str и возвращает переменную типа List[str] которая является списком электронных адресов найденных в тексте.