В моем классе выпускника на конструкции компилятора мы были представлены понятию решетки. Три лекции были посвящены решеткам, и до сих пор это походит на интересную касательную, но дилемма - то, что это действительно не помогает объяснить, как компилятор использует решетку для решения конкретной проблемы.
Мы уже покрыли парсинг и typechecking. Мы собираемся запустить анализ живучести и выделение регистра.
Отметьте, я не ищу ресурсы при создании компиляторов. Следующему списку ссылок касались этого вполне прилично. То, что я ищу, является объяснением на отношениях между компиляторами и решетками, бонусными очками для большинства примеров.
Изучение ресурсов на синтаксических анализаторах, интерпретаторах и компиляторах
Сколько из компилятора мы должны знать?
Обучение записать компилятор
Решетки - очень полезная структура для представления состояния при статическом анализе компилируемой программы, например. для удаления мертвого кода, обнаруженного анализом жизнеспособности, доступных / очень загруженных выражений, определения определений, анализа знаков и распространения констант.
Вот очень хорошее прочтение, если вам нужны подробности: Лекции по статическому анализу