С чего начать изучать парсинг и реализацию языков программирования?
Мне всегда была интересна тема парсинга и реализации языков программирования, но все время не мог найти время для этой темы. Сейчас время появилось, но я не знаю, с чего начать.
Хочу научиться писать простые языки программирования по типу Pascal
Так же интересно понять, как парсится JSON и PUG (Jade)
И понять, как в все это дело превращается в AST и потом выполняется или компилируется
В интернете куча информации, и мне попадается море терминов (Recursive descent parser, top-down parser , LL(k), EBNF), но не понятно, с чего начать.
Подскажите пожалуйста, как и с какой книги или статьи начать? (Буду рад любой литературе. Но если есть возможность, то более практико-ориентированную). Заранее спасибо.
Советую сначала определиться с областью, т.к. от этого зависит, какие структуры данных (числа, списки, матрицы, объекты...) и какие алгоритмы (сортировка, поиск, решение уравнений, статистика...) вы будете реализовывать. Напр., для программирования контроллеров вам нужно знать теорию конечных автоматов, принципы сетевых взаимодействий). А, может, понадобится реализация параллельных вычислений (нити, многоядерные процессоры, математика на графическом процессоре)
Можно например начать с книжки Лебедев В.Н. "Введение в системы программирования". Для начала понимания l|r-грамматик и т.п.
Ну и в том или ином виде - гуглить lex, yacc - это уже "практика"
Начнем с того, что Pascal имеет один из самых сложных компиляторов, проще язык HQ9+ он для этих целей и создан.
Начните с цикла статей Компилятор домашнего приготовления, а там как пойдет
Надо хотя бы познакомиться с формальными грамматиками. Потом есть два пути - использовать препроцессоры, типа yacc, happy или посмотреть какую-нибудь библиотеку комбинаторных парсеров. Последними пользоваться легче, но если взатся за них без представления о грамматиках, то можно очень легко получить неэффективный код. Препроцессоры от этого немного защищают.