2008-12-18 2 views
1

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

ответ

0

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

+0

На самом деле, Франс, я имел в виду дизайн компилятора в целом, а не только интерфейс синтаксического анализатора. Было бы неплохо иметь компилятор, который позволил бы вам поменять свой синтаксис «на лету» или сделать другие интересные вещи, такие как изменение его кода генерации кода от IL до JVM bytecode. – plaureano

-3

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

1

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

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

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

Смежные вопросы