Кто-нибудь там фактически использовал инверсию управляющих контейнеров в пределах реализации компилятора еще? Я знаю, что по дизайну компиляторы должны быть очень быстрыми, но мне всегда было интересно, как IoC/DI может повлиять на построение языка программирования - синтаксисы с возможностью «горячей» замены, кто-нибудь?Инверсия управления в компиляторах
ответ
Грамматики LR (k) обычно используют общую парсерную систему, управляемую таблицами (таблицы действий-goto/shift-reduce), поэтому вы используете инструмент генератора таблиц, который создает эти таблицы и передает их в общую парсерную систему, которая затем может анализировать ваш вход с помощью таблиц. В общем, эти синтаксические анализаторы сигнализируют вам, что не терминал был уменьшен. См., Например, систему GoldParser, которая бесплатна.
Я бы не назвал это инверсия управления, потому что это естественно для компиляторов. Обычно это серия проходов, которые преобразуют код на языке ввода в код на выходном языке. Разумеется, вы можете обменять другой пропуск (например, gcc компилирует несколько языков, используя другой интерфейс).
Языки в стиле Лиспа часто это делают. Reader macros - это фрагменты пользовательского кода, которые расширяют читатель (и, следовательно, синтаксис) языка. Обычные макросы - это фрагменты пользовательского кода, которые также расширяют язык.
Все синтаксисы не поддерживают «горячую» замену, но некоторые части расширяются различными способами.
Все это не новая идея. До того, как он был признан достойным трехбуквенного акронима, IoC был известен как «поздний переплет» и довольно согласован как хорошая идея.
- 1. Инверсия управления в списке
- 2. Состав и инверсия управления
- 3. Инверсия управления с .net
- 4. Инверсия определения управления
- 5. Инверсия управления, инверсия зависимостей и пояснение разницы в локаторах службы
- 6. Инверсия управления для вашего обращения контейнера управления?
- 7. Пример проекта IoC (инверсия управления)
- 8. Инверсия контейнера управления для PHP?
- 9. Инверсия управления для объекта возврата
- 10. Инверсия управления и внутренних классов
- 11. Инверсия управления <Инъекция зависимостей
- 12. Инверсия управления и зависимостей Инъекция
- 13. Зависимость впрыска и инверсия управления в AngularJS
- 14. Где инверсия управления существует в Entity Framework?
- 15. Инверсия управления и зависимостей в .NET Framework
- 16. Инверсия управления и зависимостей с POJO
- 17. Инъекция зависимостей и инверсия управления - терминология
- 18. Инверсия контейнеров управления и Threading/Parallel.ForEach
- 19. Инверсия управления/Dependency Injection и преобразования операторов
- 20. C# MongoDb Инъекция зависимостей и инверсия управления
- 21. Инверсия проблемы построения объектов домена управления
- 22. Инверсия использования управления из клиентского приложения MVVM
- 23. Инверсия управления по сравнению с Reflection
- 24. Инверсия управления: это больше, чем сопряжение?
- 25. Разработка, основанная на испытаниях: инверсия управления (IOC)
- 26. Зависимость инъекции с использованием МОК (Инверсия управления)
- 27. Инверсия управления в библиотеке Nugetpacked - Передача в зависимости
- 28. Обнаружение ошибок в компиляторах
- 29. Грамматики в компиляторах
- 30. Семантический анализ в компиляторах
На самом деле, Франс, я имел в виду дизайн компилятора в целом, а не только интерфейс синтаксического анализатора. Было бы неплохо иметь компилятор, который позволил бы вам поменять свой синтаксис «на лету» или сделать другие интересные вещи, такие как изменение его кода генерации кода от IL до JVM bytecode. – plaureano