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

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

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

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

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

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

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

6 ответов

34 просмотра

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

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

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

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

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

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

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта