Analyse syntaxique - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

L'analyse syntaxique consiste à mettre en évidence la structure d'un texte, généralement un programme informatique ou du texte écrit dans une langue naturelle. Un analyseur syntaxique (parser, en anglais) est un programme informatique qui réalise cette tâche. Cette opération suppose une formalisation du texte, qui est vu le plus souvent comme un élément d'un langage formel, défini par un ensemble de règles de syntaxe formant une grammaire formelle. La structure révélée par l'analyse donne alors précisément la façon dont les règles de syntaxe sont combinées dans le texte. Cette structure est souvent une hiérarchie de syntagmes, représentable par un arbre syntaxique dont les nœuds peuvent être décorés (dotés d'informations complémentaires).

L'analyse syntaxique fait habituellement suite à une analyse lexicale qui découpe le texte en un flux (parfois un DAG) de lexèmes, et sert à son tour de préalable à une analyse sémantique. Connaître la structure syntaxique d'un énoncé permet d'expliciter les relations de dépendance (par exemple entre sujet et objet) entre les différents lexèmes, puis de construire une représentation du sens de cet énoncé.

En pratique, et sauf dans les cas très simples, des coroutines sont en général nécessaires pour lier les deux. Ainsi, en FORTRAN où les espaces n'étaient pas significatifs, GOTO5=1 ou DO1I=3, affectations autorisées par la syntaxe bien que perverses, auraient été par erreur considérées comme des fautes de syntaxe si l'opération d'analyse lexicale avait été réalisée totalement avant que ne commence la syntaxique. Dans la pratique, les compilateurs de bas de gamme les refusaient.

Liens avec les langages formels

Les méthodes employées pour réaliser une analyse syntaxique dépendent largement du formalisme employé pour la syntaxe du langage mais aussi du langage lui-même. Toutefois, il est souvent fait usage, pour modéliser un langage ou une langue, de grammaires de réécriture, parmi lesquelles les plus populaires sont les grammaires non contextuelles.

Ainsi, les langages de programmation sont habituellement décrits par ces grammaires, et ce depuis la formalisation d'Algol en BNF. De même, si les grammaires non contextuelles sont jugées peu adaptées pour la description des langues naturelles, les algorithmes d'analyse syntaxique inventés pour les langages non contextuels peuvent parfois être adaptés aux formalismes plus complexes utilisés en traitement des langues naturelles, comme les grammaires d'arbres adjoints (TAG).

L'équivalence entre les langages définissables par certaines classes de grammaires et ceux que reconnaissent certaines classes d'automates permettent de construire des analyseurs syntaxiques à l'aide d'automates. Ainsi, les langages définissables par une grammaire non contextuelle sont aussi ceux qui sont reconnaissables par un automate à pile.

Récupération sur erreur

En analyse syntaxique des langages de programmation, il faut être capable de continuer l'analyse même lorsque le code source contient des erreurs, pour éviter des cycles de compilation/correction fastidieux pour le développeur. De même, en analyse syntaxique des langues naturelles, il faut pouvoir analyser des énoncés même s'ils ne sont pas couverts par la grammaire, inévitablement incomplète. La récupération sur erreur, ou rattrapage d'erreur, doit être suffisamment efficace pour détecter les problèmes, et "faire avec", moyennant une correction du source ou la faculté de produire des analyses (légèrement) déviantes par rapport à la grammaire. On peut citer quatre approches qui vont dans ce sens, à savoir

  • le mode panique,
  • les productions erreurs,
  • la correction locale,
  • la correction globale.
Page générée en 0.095 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise