Est-ce que quelqu'un a réellement utilisé l'inversion des conteneurs de contrôle dans les implémentations de compilateur encore? Je sais que par conception, les compilateurs doivent être très rapides, mais j'ai toujours été curieux de savoir comment IoC/DI pourrait affecter la construction d'un langage de programmation - des syntaxes permutables à chaud, quelqu'un?Inversion de contrôle dans les compilateurs
Répondre
Les grammaires LR (k) utilisent généralement un système d'analyseur générique piloté par des tables (tables action-goto/shift-reduce), donc vous utilisez un générateur de tables qui génère ces tables. peut analyser votre entrée en utilisant les tables. En général, ces systèmes d'analyse syntaxique vous signalent qu'un non-terminal a été réduit. Voir par exemple le système GoldParser qui est gratuit.
Je ne l'appellerais pas vraiment inversion car il est naturel pour les compilateurs. Ils sont généralement une série de passes qui transforment le code dans la langue d'entrée pour coder dans la langue de sortie. Vous pouvez, bien sûr, échanger une passe différente (par exemple, gcc compile plusieurs langues en utilisant une interface différente).
Les langages de style Lisp le font souvent. Reader macros sont des morceaux de code écrit par l'utilisateur qui étendent le lecteur (et donc, la syntaxe) d'un langage. Les macros simples sont des morceaux de code écrits par l'utilisateur qui étendent également la langue.
Les syntaxes entières ne sont pas permutables à chaud, mais certaines pièces peuvent être étendues de différentes manières.
Tout ceci n'est pas une idée nouvelle. Avant d'être jugé digne d'un acronyme à trois lettres, IoC était connu sous le nom de «late binding», et était plutôt accepté comme une bonne idée.
- 1. Inversion de contrôle pour votre conteneur Inversion de contrôle?
- 2. dépendances Isoler sans inversion de contrôle
- 3. Bit Inversion
- 4. Compilateurs pour les scripts shell
- 5. Inversion de chaîne en Python
- 6. Injection de dépendances et inversion de commande - terminologie
- 7. Branchement aux compilateurs Java
- 8. Inversion d'une chaîne en C
- 9. compilateurs pour les langues de 1950 et 1960 de
- 10. Cumum différents compilateurs
- 11. bibliothèques de liens compilées par divers compilateurs
- 12. Rendre les compilateurs GCC et autres C++ très stricts
- 13. Avez-vous utilisé l'un des interpréteurs C++ (pas les compilateurs)?
- 14. php: inversion des effets de mysql_real_escape_string sur un binaire
- 15. Quels compilateurs JIT est-il compatible CLR
- 16. Y a-t-il des compilateurs de code natif Lisp?
- 17. Comment les entiers des compilateurs sont-ils mis en mémoire et traités dans la CPU?
- 18. Comment les compilateurs modernes utilisent-ils les instructions mmx/3dnow/sse?
- 19. éliminant le problème d'incompatibilité entre les compilateurs avec les bibliothèques dynamiques C++
- 20. Pourquoi la gestion d'expression de paramètre de modèle non-type est-elle incohérente entre les compilateurs?
- 21. Commutation de compilateurs tiers dans devenv à partir de la ligne de commande
- 22. Microsoft CCI - ressources, références pour écrire des compilateurs
- 23. Pourquoi ai-je besoin de SEM_PRIORITY_Q lorsque j'utilise un mutex VxWorks à inversion de sécurité?
- 24. Changement de bits dans les sommes de contrôle Internet
- 25. Comment utiliser les compilateurs Fortran pour analyser ou imprimer des fichiers sources?
- 26. Pourquoi certains compilateurs utilisent-ils "a.out" comme nom par défaut pour les exécutables?
- 27. Limiter les types de contrôle enfant autorisés dans un contrôle de modèles ASP.NET
- 28. Cachez les vignettes d'image dans le contrôle flexible de TileList
- 29. Wpf: Liste tous les noms de contrôle dans une application
- 30. Distinction entre les chemins de contrôle d'exécution
En fait, Frans, je me référais à la conception d'un compilateur dans son ensemble, pas seulement l'interface de l'analyseur. Ce serait bien d'avoir un compilateur qui vous permette d'échanger sa syntaxe "à la volée", ou faire d'autres choses intéressantes comme changer son backend de génération de code de IL vers JT bytecode. – plaureano