2008-12-18 9 views
1

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

0

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.

+0

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

-3

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).

1

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.

Questions connexes