парсер языка над алфавитом символов проще представить как композицию парсеров - один преобразует поток символов в поток лексем, а второй работает с алфавитом лексем. а как они это делают - уже детали.
Традиционно для лексера использовались регулярные выражения, а для парсеров - кс грамматики. но для лексера тоже можно использовать кс-грамматику, в antlr так и делается.
Именно. И ведь можно также расширить нотацию КС-грамматик конструкциями регулярных выражений. Тогда можно будет вовсе забыть и о лексерах, и регулярных выражениях, как таковых. Эта «свежая» мысль приходила в голову еще разработчикам начала 60-х :)
Именно. И ведь можно также расширить нотацию КС-грамматик конструкциями регулярных выражений. Тогда можно будет вовсе забыть и о лексерах, и регулярных выражениях, как таковых. Эта «свежая» мысль приходила в голову еще разработчикам начала 60-х :)
но тогда приходилось больше думать о производительности, чем о сложности разработки. и это накладывало ограничения на языки.
Если парсить парсер комбинаторами и вообще рекурсивным спуском — можно обойтись и без лексера
Не рекомендую. Искать, в каком из парсеров потерялся проблел - такое себе. Уж лучше тогда и лексер руками написать. А уже на выходе лексера делать рекурсивный спуск.
Не, это всё же генератор парсеров, из грамматики на джаваскрипте генерится либка сишная и можно потом кучей врапперов для разных языков разбирать дерево