× Description Historique Architecture Téléchargement Contact
 Retourner à Logiciels et Ressources

SYNTAX

Générateur d'analyseurs lexicaux et syntaxiques

Ancien site web

Description

SYNTAX est conçu et développé chez Inria par Pierre Boullier depuis plusieurs dizaines d'années au sein des équipes ALMAnaCH, ALPAGE, ATOLL, et d'autres encore auparavant, avec le concours notamment de Philippe Deschamp et de Benoît Sagot. SYNTAX est un système qui permet (i) à partir d'une grammaire non-contextuelle de construire l'automate optimisé correspondant, et (ii) à l'aide d'une librairie d'analyse, d'exécuter les automates produits sur des textes sources. SYNTAX permet de traiter soit des grammaires déterministes de la classe LR et d'autres classes plus larges, soit des grammaires non-contextuelles générales. La version déterministe a fait l'objet d'utilisations industrielles (Ada, par exemple). La version non-déterministe est au cœur de divers analyseurs syntaxiques pour le langage naturel, et notamment l'analyseur syntaxique SxLFG, qui repose sur le formalisme LFG (Lexical-Functional Grammars), et la chaîne de pré-traitement SxPipe.

La version actuelle de SYNTAX (version 6.0 beta) comprend également des générateurs d'analyseurs pour d'autres formalismes, qu'il s'agisse de formalismes sensibles au contexte (TAG, RCG) ou de formalismes reposant sur les grammaires hors-contextes mais complétés par des calculs d'attributs, en particulier pour le traitement automatique des langues (formalisme LFG).

SYNTAX a été porté vers diverses architectures, y compris des architectures 64-bits, principalement par l'ancienne équipe VASY (Inria Rhône-Alpes), aujourd'hui CONVECS.

SYNTAX est distribué librement sous licence libre : la bibliothèque SYNTAX et le code produit par SYNTAX sont sous licence CeCILL-C (à la LGPL), alors que le code source des constructeurs est sous licence CeCILL (à la GPL).

Par ailleurs, SYNTAX a désormais sa page sur la wikipedia francophone et sa page sur la wikipedia anglophone.

Historique

Historiquement, SYNTAX a d'abord eu pour principale application la construction d'analyseurs pour les langages de programmation, dans le domaine de la compilation (C, Ada, etc…). C'était donc principalement un générateur d'analyseurs non-contextuels déterministes, à l'instar des programmes unix Lex et Yacc. La force de SYNTAX par rapport à ces programmes était alors triple:

  • une plus grande variété et une plus grande puissance d'expression dans les mécanismes sémantiques utilisables pendant ou après l'analyse,
  • des mécanismes performants de rattrapage d'erreurs, [Boullier 87],
  • la génération d'analyseurs compacts et performants (plus performants qu'avec Yacc).

C'est la version 3.9 de SYNTAX qui est l'aboutissement des recherches dans le domaine de l'analyse déterministe. Il existe un manuel d'utilisation et de mise en œuvre de la version 3.5 de SYNTAX [Boullier 88]. La plupart des utilisations de SYNTAX dans le domaine de la compilation de langages de programmation utilise cette technologie, sous la forme de SYNTAX 3.9 (compilateur Ada,…) ou sous son évolution dans la version courante de SYNTAX.

Depuis une vingtaine d'années, SYNTAX s'est tourné vers des applications de traitement des langues. Ceci a conduit à quatre types de développements :

  • la possibilité de traiter (de façon déterministe) une plus grande classe de langages non-contextuels, et en particulier les langages RLR (un langage non-contextuel est dit RLR si, pour tout conflit dans l'automate LR(0), on peut trouver une grammaire régulière avec laquelle on peut analyser ce qui reste de la chaîne d'entrée jusqu'à atteindre un point où l'on peut décider comment résoudre le conflit (c'est donc une forme de lookahead non-borné) ; ceci a donné lieu à la version 4 de SYNTAX ;
  • l'analyse non-contextuelle non-déterministe, avec des générateurs d'analyseurs à la Earley et à la GLR ; ceci a donné lieu à la version 5 de SYNTAX ;
  • l'analyse contextuelle (non-déterministe), avec un générateur d'analyseurs RCG ;
  • l'analyse guidée (pour les grammaires non-contextuelles comme pour les RCG) ; ce point et le précédent ont donné lieu à la version 6 de SYNTAX.

Les versions 4 et 5 ne sont pas distribuées, alors que la version 3 était disponible gratuitement à des fins de recherche et que la version 6 est disponible librement sous licence CeCILL et CeCILL-C, selon les fichier (voir la page de téléchargement et le fichier LICENSE inclus dans le paquetage).

Architecture

SYNTAX est développé presque exclusivement en C (seules quelques petites extensions récentes utilisent perl) . SYNTAX ne produit pas directement des analyseurs à partir des grammaires. Il produit un ensemble de données en langage C qui doivent être compilées et liées (linked) avec différents modules généraux. Ces données sont des tables, c'est-à-dire des tableaux C initialisés, et des fonctions.

Le cœur de SYNTAX est constitué principalement de trois types de fichiers:

  • un certain nombre de constructeurs qui construisent les tables et les fonctions spécifiques à un analyseur à partir de la grammaire, et qui définissent entre autres la grammaire elle-même, les données pour la construction du lexeur, celles pour la construction de l'analyseur syntaxique et celles pour le traitement des erreurs;
  • les modules contenant les fonctions génériques qui forment le cœur de chaque analyseur,
  • un nombre important de modules utilitaires, qui sont une des causes de l'efficacité de SYNTAX, et qui permettent une gestion très performantes des chaînes de caractères, des tables de hachage, des tableaux associatifs, des vecteurs de bits et des ensembles, etc.

Enfin, SYNTAX est bootstrappé : la compilation des constructeurs se fait à l'aide de SYNTAX lui-même (et donc desdits constructeurs).

Téléchargement

SYNTAX est hébergé sur la GForge Inria. Il doit être migré sous peu sur le Gitlab Inria.

La dernière version packagée de SYNTAX et les versions antérieures peuvent être téléchargées sur la page de téléchargement du projet SYNTAX sur la GForge Inria.

Contact

Pour plus d'informations ou pour poser une question, merci de contacter benoit.sagot[at]inria.fr.