Analyse syntaxique : types d'analyse du compilateur de haut en bas et de bas en haut
Quโest-ce que lโanalyse syntaxique ?
Analyse syntaxique est une deuxiรจme phase du processus de conception du compilateur dans laquelle la chaรฎne d'entrรฉe donnรฉe est vรฉrifiรฉe pour la confirmation des rรจgles et de la structure de la grammaire formelle. Il analyse la structure syntaxique et vรฉrifie si l'entrรฉe donnรฉe est ou non dans la syntaxe correcte du langage de programmation.
Le processus d'analyse syntaxique dans la conception du compilateur intervient aprรจs la phase d'analyse lexicale. Il est รฉgalement connu sous le nom dโarbre dโanalyse ou dโarbre de syntaxe. Le Parse Tree est dรฉveloppรฉ ร lโaide dโune grammaire prรฉdรฉfinie du langage. L'analyseur syntaxique vรฉrifie รฉgalement si un programme donnรฉ remplit les rรจgles impliquรฉes par une grammaire hors contexte. Si cela satisfait, lโanalyseur crรฉe alors lโarbre dโanalyse de ce programme source. Sinon, il affichera des messages d'erreur.

Pourquoi avez-vous besoin d'un analyseur de syntaxe ?
- Vรฉrifiez si le code est valide grammaticalement
- L'analyseur syntaxique vous aide ร appliquer des rรจgles au code
- Vous aide ร vous assurer que chaque accolade d'ouverture a un solde de clรดture correspondant
- Chaque dรฉclaration a un type et ce type doit exister
Terminologie importante de lโanalyseur de syntaxe
Terminologies importantes utilisรฉes dans le processus d'analyse syntaxique :
- Phrase: Une phrase est un groupe de caractรจres sur un alphabet.
- Lexรจme : Un lexรจme est l'unitรฉ syntaxique de niveau le plus bas d'une langue (par exemple, total, dรฉbut).
- Token: Un jeton n'est qu'une catรฉgorie de lexรจmes.
- Mots-clรฉs et mots rรฉservรฉs โ Il sโagit dโun identifiant qui est utilisรฉ comme partie fixe de la syntaxe dโune instruction. C'est un mot rรฉservรฉ que vous ne pouvez pas utiliser comme nom de variable ou identifiant.
- Mots bruyants โ Les mots parasites sont facultatifs et sont insรฉrรฉs dans une dรฉclaration pour amรฉliorer la lisibilitรฉ de la phrase.
- Commentaires โ Cโest une partie trรจs importante de la documentation. Il s'affiche principalement par, /* */, ou//Blank (espaces)
- Delimiters โ C'est un รฉlรฉment syntaxique qui marque le dรฉbut ou la fin d'une unitรฉ syntaxique. Comme une dรฉclaration ou une expression, ยซ commencer ยปโฆ ยป fin ยป, ou {}.
- Jeu de caractรจres โ ASCII, Unicode
- Identifiants โ Il sโagit dโune restriction sur la longueur qui permet de rรฉduire la lisibilitรฉ de la phrase.
- Operasymboles de tor โ + et โ effectue deux opรฉrations arithmรฉtiques de base.
- รlรฉments syntaxiques de la langue
Pourquoi avons-nous besoin d'une analyse syntaxique ?
Une analyse vรฉrifie รฉgalement que la chaรฎne dโentrรฉe est bien formรฉe et, si ce nโest pas le cas, la rejette.
Voici les tรขches importantes effectuรฉes par l'analyseur dans la conception du compilateur :
- Vous aide ร dรฉtecter tous les types d'erreurs de syntaxe
- Trouver la position ร laquelle l'erreur s'est produite
- Description claire et prรฉcise de l'erreur.
- Rรฉcupรฉration d'une erreur pour continuer et trouver d'autres erreurs dans le code.
- Ne devrait pas affecter la compilation des programmes ยซ corrects ยป.
- L'analyse doit rejeter les textes invalides en signalant les erreurs de syntaxe
Techniques d'analyse
Les techniques d'analyse sont divisรฉes en deux groupes diffรฉrents :
- Analyse descendante,
- Analyse ascendante
Analyse descendante
Dans l'analyse descendante, la construction de l'arbre d'analyse commence ร la racine puis se dirige vers les feuilles.
Il existe deux types d'analyse descendante :
- Analyse prรฉdictive :
L'analyse prรฉdictive peut prรฉdire quelle production doit รชtre utilisรฉe pour remplacer la chaรฎne d'entrรฉe spรฉcifique. L'analyseur prรฉdictif utilise un point d'anticipation, qui pointe vers les symboles d'entrรฉe suivants. Le retour en arriรจre n'est pas un problรจme avec cette technique d'analyse. Il est connu sous le nom dโanalyseur LL(1)
- Analyse de descente rรฉcursive :
Cette technique d'analyse analyse de maniรจre rรฉcursive l'entrรฉe pour crรฉer un arbre de prase. Il se compose de plusieurs petites fonctions, une pour chaque non-terminal de la grammaire.
Analyse ascendante
Dans l'analyse ascendante dans la conception du compilateur, la construction de l'arbre d'analyse commence par la feuille, puis se poursuit vers sa racine. On l'appelle รฉgalement analyse par rรฉduction de dรฉcalage. Ce type d'analyse dans la conception du compilateur est crรฉรฉ ร l'aide de certains des outils logiciels.
Erreur โ Mรฉthodes de rรฉcupรฉration
Erreurs courantes qui se produisent lors de l'analyse dans le logiciel systรจme
- Lexical: Nom d'un identifiant mal saisi
- syntaxique: parenthรจse dรฉsรฉquilibrรฉe ou point-virgule manquant
- Sรฉmantique: affectation de valeur incompatible
- logique: Boucle infinie et code inaccessible
Un analyseur doit รชtre capable de dรฉtecter et de signaler toute erreur trouvรฉe dans le programme. Ainsi, chaque fois qu'une erreur se produisait, l'analyseur. Il devrait รชtre capable de le gรฉrer et de continuer ร analyser l'entrรฉe restante. Un programme peut prรฉsenter les types dโerreurs suivants ร diffรฉrentes รฉtapes du processus de compilation. Il existe cinq mรฉthodes courantes de rรฉcupรฉration d'erreur qui peuvent รชtre implรฉmentรฉes dans l'analyseur.
Rรฉcupรฉration en mode instruction
- Dans le cas oรน l'analyseur rencontre une erreur, il vous aide ร prendre des mesures correctives. Cela permet au reste des entrรฉes et des รฉtats dโรชtre analysรฉs ร lโavance.
- Par exemple, lโajout dโun point-virgule manquant intervient dans la mรฉthode de rรฉcupรฉration en mode instruction. Cependant, le concepteur d'analyse doit รชtre prudent lorsqu'il effectue ces modifications, car une mauvaise correction peut conduire ร une boucle infinie.
Rรฉcupรฉration en mode panique
- Dans le cas oรน l'analyseur rencontre une erreur, ce mode ignore le reste de l'instruction et ne traite pas l'entrรฉe erronรฉe vers un dรฉlimiteur, comme un point-virgule. Il s'agit d'une mรฉthode simple de rรฉcupรฉration d'erreur.
- Dans ce type de mรฉthode de rรฉcupรฉration, l'analyseur rejette les symboles d'entrรฉe un par un jusqu'ร ce qu'un seul groupe dรฉsignรฉ de jetons de synchronisation soit trouvรฉ. Les jetons de synchronisation utilisent gรฉnรฉralement des dรฉlimiteurs comme ou.
Rรฉcupรฉration au niveau de la phrase
- Le compilateur corrige le programme en insรฉrant ou en supprimant des jetons. Cela lui permet de procรฉder ร l'analyse ร partir de lร oรน il se trouvait. Il effectue une correction sur l'entrรฉe restante. Il peut remplacer un prรฉfixe de l'entrรฉe restante par une chaรฎne, ce qui aide l'analyseur ร poursuivre le processus.
Productions d'erreurs
- La rรฉcupรฉration de la production d'erreurs รฉlargit la grammaire du langage qui gรฉnรจre les constructions erronรฉes. L'analyseur effectue ensuite un diagnostic d'erreur sur cette construction.
Correction globale
- Le compilateur doit apporter le moins de modifications possible lors du traitement d'une chaรฎne d'entrรฉe incorrecte. รtant donnรฉ la chaรฎne d'entrรฉe a et la grammaire c incorrectes, les algorithmes rechercheront un arbre d'analyse pour une chaรฎne associรฉe b. Comme certaines insertions, suppressions et modifications apportรฉes aux jetons nรฉcessaires pour transformer an en b, elles sont aussi minimes que possible.
Grammaire
Une grammaire est un ensemble de rรจgles structurelles qui dรฉcrivent une langue. Les grammaires attribuent une structure ร n'importe quelle phrase. Ce terme dรฉsigne รฉgalement l'รฉtude de ces rรจgles, et ce dossier inclut la morphologie, la phonologie et la syntaxe. Il est capable de dรฉcrire de nombreuses syntaxes de langages de programmation.
Rรจgles de grammaire des formes
- Le symbole non terminal doit apparaรฎtre ร gauche d'au moins une production
- Le symbole du but ne doit jamais รชtre affichรฉ ร droite du ::= d'une production.
- Une rรจgle est rรฉcursive si LHS apparaรฎt dans son RHS
Conventions de notation
Le symbole des conventions de notation peut รชtre indiquรฉ en plaรงant l'รฉlรฉment entre crochets. Il s'agit d'une sรฉquence arbitraire d'instances de l'รฉlรฉment qui peut รชtre indiquรฉe en plaรงant l'รฉlรฉment entre accolades suivi d'un astรฉrisque, { โฆ }*.
Il s'agit d'un choix de l'alternative qui peut utiliser le symbole au sein de la rรจgle unique. Il peut รชtre placรฉ entre parenthรจses ([,] ) si nรฉcessaire.
Deux types de zones de conventions de notation Terminal et Non-terminaux
1.Bornes :
- Lettres minuscules de l'alphabet telles que a, b, c,
- Operasymboles tels que +, -, *, etc.
- Symboles de ponctuation tels que parenthรจses, diรจse, virgule
- 0, 1, โฆ, 9 chiffres
- Chaรฎnes en gras comme id ou if, tout ce qui reprรฉsente un seul symbole de terminal
2.Non-terminaux :
- Lettres majuscules telles que A, B, C
- Noms en italique minuscule : l'expression ou certains
Grammaire sans contexte
Une CFG est une grammaire rรฉcursive ร gauche qui possรจde au moins une production du type. Les rรจgles d'une grammaire hors contexte sont principalement rรฉcursives. Un analyseur de syntaxe vรฉrifie si un programme spรฉcifique satisfait ou non ร toutes les rรจgles de la grammaire sans contexte. Si tel est le cas, ces analyseurs de syntaxe de rรจgles peuvent crรฉer un arbre d'analyse pour ce programme.
expression -> expression -+ term expression -> expression โ term expression-> term term -> term * factor term -> expression/ factor term -> factor factor factor -> ( expression ) factor -> id
Dรฉrivation de la grammaire
La dรฉrivation grammaticale est une sรฉquence de rรจgles de grammaire qui transforme le symbole de dรฉbut en chaรฎne. Une dรฉrivation prouve que la chaรฎne appartient au langage de la grammaire.
Dรฉrivation la plus ร gauche
Lorsque la forme phrasenelle dโentrรฉe est analysรฉe et remplacรฉe dans lโordre de gauche ร droite, on parle de dรฉrivation la plus ร gauche. La forme phrase qui est dรฉrivรฉe de la dรฉrivation la plus ร gauche est appelรฉe forme phrase ร gauche.
Dรฉrivation la plus ร droite
La dรฉrivation la plus ร droite analyse et remplace l'entrรฉe par les rรจgles de production, de droite ร gauche, sรฉquence. C'est ce qu'on appelle la dรฉrivation la plus ร droite. La forme phrase qui dรฉrive de la dรฉrivation la plus ร droite est connue sous le nom de forme phrase ร droite.
Syntaxe vs analyseur lexical
| Analyseur de syntaxe | Analyseur lexical |
|---|---|
| L'analyseur syntaxique traite principalement les constructions rรฉcursives du langage. | L'analyseur lexical facilite la tรขche de l'analyseur syntaxique. |
| L'analyseur de syntaxe fonctionne sur les jetons d'un programme source pour reconnaรฎtre les structures significatives dans le langage de programmation. | L'analyseur lexical reconnaรฎt le jeton dans un programme source. |
| Il reรงoit des entrรฉes, sous forme de jetons, provenant d'analyseurs lexicaux. | Il est responsable de la validitรฉ d'un token fourni par
l'analyseur de syntaxe |
Inconvรฉnients de lโutilisation des analyseurs de syntaxe
- Il ne dรฉterminera jamais si un jeton est valide ou non
- Ne vous aide pas ร dรฉterminer si une opรฉration effectuรฉe sur un type de jeton est valide ou non
- Vous ne pouvez pas dรฉcider que ce jeton est dรฉclarรฉ et initialisรฉ avant d'รชtre utilisรฉ
Rรฉsumรฉ
- L'analyse syntaxique est une deuxiรจme phase du processus de conception du compilateur qui suit l'analyse lexicale.
- L'analyseur syntaxique vous aide ร appliquer des rรจgles au code
- Phrase, lexรจme, jeton, mots clรฉs et mots rรฉservรฉs, mots parasites, commentaires, dรฉlimiteurs, jeu de caractรจres, identifiants sont quelques termes importants utilisรฉs dans l'analyse syntaxique dans la construction du compilateur.
- Parse vรฉrifie que la chaรฎne d'entrรฉe est bien formรฉe, et sinon, la rejette
- Les techniques d'analyse sont divisรฉes en deux groupes diffรฉrents : analyse descendante et analyse ascendante.
- Lexicale, syntaxique, sรฉmantique et logique sont des erreurs courantes qui se produisent lors de la mรฉthode d'analyse.
- Une grammaire est un ensemble de rรจgles structurelles qui dรฉcrivent une langue
- Le symbole des conventions de notation peut รชtre indiquรฉ en plaรงant l'รฉlรฉment entre crochets
- Une CFG est une grammaire rรฉcursive ร gauche qui possรจde au moins une production du type
- La dรฉrivation grammaticale est une sรฉquence de rรจgles de grammaire qui transforme le symbole de dรฉbut en chaรฎne
- L'analyseur syntaxique traite principalement des constructions rรฉcursives du langage tandis que l'analyseur lexical facilite la tรขche de l'analyseur syntaxique dans SGBD
- L'inconvรฉnient de la mรฉthode de l'analyseur de syntaxe est qu'elle ne dรฉterminera jamais si un jeton est valide ou non.


