Skip to content

Commit

Permalink
Update parsing.md ( и другие.)
Browse files Browse the repository at this point in the history
  • Loading branch information
ksromanov authored Oct 9, 2023
1 parent e50e72e commit 8fec2a2
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion docs/parsing.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ _пока пусто_

## Чем отличаются лексический и синтаксический разбор?

Очень часто разбор текста и построение из него дерева разбора (_parse tree_) удобно разбить на две фазы. Очень упрощённо, можно сказать, что в первой фазе используется набор переключаемых грамматик, близких к регулярным (грамматика, описываемая регулярными выражениями); а во второй фазе — контекстно-свободная или контекстно-зависимая. Это разбиение сильно упрощает задачу, позволяя использовать классические _CFG_ парсеры для разбора промышленных языков. В принципе оно не обязательно, поскольку есть альтернативные подходы: PEG, scannerless, парсер-комбинаторы, ручной разбор методом рекурсивного спуска.
Очень часто разбор текста и построение из него дерева разбора (_parse tree_) удобно разбить на две фазы. Очень упрощённо, можно сказать, что в первой фазе используется набор переключаемых грамматик, близких к регулярным (грамматика, описываемая регулярными выражениями); а во второй фазе — контекстно-свободная или контекстно-зависимая. Это разбиение сильно упрощает задачу, позволяя использовать классические _CFG_ парсеры для разбора промышленных языков. В принципе оно не обязательно, поскольку есть альтернативные подходы: PEG, scannerless, парсер-комбинаторы, ручной разбор методом рекурсивного спуска и другие.

Первая фаза называется _лексическим_ разбором, а вторая — _синтаксическим_ или _грамматическим_ разбором. Исторически для этих двух фаз часто используются две разные программы с разными языками описания грамматик. Передача потока промежуточных символов (_token_'ов) обычно происходит конвейерным образом (см. генераторы Python, списки в Haskell) с возможной обратной связью (см. _lexer modes_). Например, связки *lex/yacc* или *Alex/Happy*. Но есть и программы, объединяющие в себе обе фазы с единым конфигурационным файлом, такие как *antlr4*.

Expand Down

0 comments on commit 8fec2a2

Please sign in to comment.