Инверсия управления в компиляторах - PullRequest
1 голос
/ 18 декабря 2008

Кто-нибудь уже использовал инверсию управляющих контейнеров в реализациях компилятора? Я знаю, что по замыслу компиляторы должны быть очень быстрыми, но мне всегда было любопытно, как IoC / DI может влиять на конструирование языка программирования - кто-нибудь поддерживает горячую замену синтаксиса?

Ответы [ 3 ]

1 голос
/ 10 февраля 2009

Языки в стиле Лисп часто делают это. Макросы Reader - это фрагменты написанного пользователем кода, которые расширяют читатель (и, следовательно, синтаксис) языка. Простые старые макросы - это фрагменты написанного пользователем кода, которые также расширяют язык.

Весь синтаксис не поддерживает горячую замену, но некоторые части можно расширять различными способами.

Все это не новая идея. До того, как IoC был признан достойным трехбуквенной аббревиатуры, он был известен как «поздняя привязка» и был довольно хорошо согласован как хорошая идея.

0 голосов
/ 18 декабря 2008

Я бы не назвал это инверсией управления, потому что это естественно для компиляторов. Обычно это серии проходов, которые преобразуют код на языке ввода в код на языке вывода. Разумеется, вы можете поменять местами другой этап (например, gcc компилирует несколько языков с использованием другого интерфейса).

0 голосов
/ 18 декабря 2008

LR (k) грамматики обычно используют универсальную систему синтаксического анализа, управляемую таблицами (таблицы action-goto / shift-Reduce), поэтому вы используете инструмент генератора таблиц, который создает эти таблицы и передает их в универсальную систему синтаксического анализа, которая затем может проанализировать ваши данные, используя таблицы. В общем, эти системы синтаксического анализа тогда сообщают вам, что нетерминальное число было уменьшено. Смотрите, например, систему GoldParser, которая является бесплатной.

...