185 похожих чатов

Ну тогда можно тут обсудить, а я вставлю. ## Что такое

лексический и синтаксический разбор?

Очень часто разбор текста и построение из него дерева разбора (parse tree) удобно разбить на две фазы. В первой фазе используется регулярная грамматика (грамматика регулярных выражений), во второй фазе - контекстно-свободная. Это, в принципе, не обязательно, но крайне удобно и быстро.

То есть, в первой фазе текст пропускается через некоторую программу оперирующую исключительно регулярными выражениями, она читает текст программы посимвольно (UTF8 или ASCII символы), составляя из этих символов слова (так называемые tokens). Поскольку грамматика регулярная, дерево вырождено, и, таким образом, поток символов ASCII превращается в поток token'ов. С формальной точки зрения и то, и другое - _символы_, но разных языков.

Во второй фазе поток token'ов разбирается с помощью контекстно-свободной грамматики, превращаясь в нормальное дерево разбора.

Первая фаза называется лексическим разбором, а вторая - синтаксическим или грамматическим разбором. Исторически для этих двух фаз часто используются две разные программы с разными языками описания грамматик. Например связка *lex/yacc* или *Alex/Happy*. Но есть и программы, объединяющие в себе обе фазы с единым конфигурационным файлом, например *antlr4* или *BNFC*.

6 ответов

22 просмотра

Лексер не обязательно регулярный.

Konstantin-Romanov Автор вопроса
suhr
Лексер не обязательно регулярный.

Я не спорю. Там везде как-правило.

Konstantin-Romanov Автор вопроса
suhr
Лексер не обязательно регулярный.

И можно конкретный пример нерегулярного лексера?

Комментарии в паскале

Konstantin Romanov
И можно конкретный пример нерегулярного лексера?

Доллар-строки в PostgreSQL: $mystring$this is an actual string$mystring$.

Konstantin-Romanov Автор вопроса

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта