TOM est un langage de programmation développé au sein de l' INRIA et qui marie le meilleur des mondes des langages fonctionnels et impératifs en ajoutant du filtrage de motifs («pattern matching») et de la programmation par statégies à Java, C ou OCaml.
TOM permet de manipuler des arbres (termes, AST, XML, ...) grâce à un mécanisme de filtrage puissant (travaillant aussi sur des listes) sur les types Java/C. De plus, il fournit un outil permettant de générer des arbres non-mutables en Java avec partage maximal de la mémoire et invariants (listes triées, sans doublons, arbres balancés, ...).
Combiné avec un langage de stratégies réflexives, il est utilisé entre autres pour :
- développer des compilateurs (comme le compilateur Tom) ;
- transformer à la volée du bytecode Java ;
- le développement d'un assistant à la démonstration ;
- générer des sites web (transformations de XML plus puissantes que XSLT grâce aux stratégies)
Le compilateur est stable et mature, et la documentation est fournie et à jour. De plus, l'environnement de programmation est multi-plate-forme et convivial : greffon vim, tâches ant, greffon pour l'IDE Eclipe.
Le tout est publié sous des licences libres (GPL et BSD).