Qu'est-ce que l'analyse syntaxique?
L'analyse de syntaxe 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 dans la syntaxe correcte du langage de programmation ou non.
L'analyse de syntaxe dans le processus de conception de compilateur vient après la phase d'analyse lexicale. Il est également connu sous le nom d'arbre d'analyse ou d'arbre de syntaxe. L'arbre d'analyse est développé à l'aide d'une grammaire prédéfinie de la langue. L'analyseur de syntaxe vérifie également si un programme donné remplit les règles impliquées par une grammaire sans contexte. S'il satisfait, l'analyseur crée alors l'arborescence d'analyse de ce programme source. Sinon, il affichera des messages d'erreur.
![](https://cdn.css-code.org/3468212/syntax_analysis_compiler_top_down_ampamp_bottom_up_parsing_types.png.webp)
Dans ce tutoriel, vous apprendrez
- Pourquoi avez-vous besoin de Syntax Analyzer?
- Terminologie importante de l'analyseur de syntaxe
- Pourquoi avons-nous besoin d'une analyse syntaxique?
- Techniques d'analyse
- Erreur - Méthodes de récupération
- Grammaire:
- Conventions de notation
- Grammaire sans contexte
- Dérivation de la grammaire
- Syntaxe et analyseur lexical
- Inconvénients de l'utilisation des analyseurs de syntaxe
Pourquoi avez-vous besoin de Syntax Analyzer?
- Vérifier si le code est grammaticalement valide
- 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 que le 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).
- Jeton: un jeton n'est qu'une catégorie de lexèmes.
- Mots clés et mots réservés - C'est 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 ou identifiant de variable.
- Mots de bruit - Les mots de bruit 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)
- Délimiteurs - 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, "begin"… '' end ", ou {}.
- Jeu de caractères - ASCII, Unicode
- Identificateurs - Il s'agit d'une restriction sur la longueur qui vous aide à réduire la lisibilité de la phrase.
- Les symboles d'opérateur - + et - exécutent deux opérations arithmétiques de base.
- Éléments syntaxiques du langage
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
- Trouvez 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 non valides en signalant des 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'arborescence d'analyse commence à la racine, puis se dirige vers les feuilles.
Deux types d'analyse descendante sont:
- 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'observation, 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 de LL (1) Parser
- Analyse de descente récursive:
Cette technique d'analyse analyse récursivement 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 de la conception du compilateur, la construction de l'arborescence d'analyse commence par le congé, puis elle est traitée vers sa racine. Il est également appelé analyse de réduction de décalage. Ce type d'analyse dans la conception du compilateur est créé à l'aide de certains 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 non accessible
Un analyseur devrait pouvoir détecter et signaler toute erreur trouvée dans le programme. Ainsi, chaque fois qu'une erreur se produit, l'analyseur. Il devrait être capable de le gérer et de continuer à analyser les entrées restantes. Un programme peut avoir 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 syntaxique
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'analyser à l'avance.
- Par exemple, l'ajout d'un point-virgule manquant se fait dans la méthode de récupération en mode instruction. Cependant, le concepteur d'analyse doit être prudent lors de 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 d'une entrée erronée vers un délimiteur, comme un point-virgule. Il s'agit d'une méthode de récupération d'erreur simple.
- 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 tels que 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 d'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'erreur
- La récupération de production d'erreur étend la grammaire du langage qui génère les constructions erronées. L'analyseur effectue ensuite un diagnostic d'erreur concernant cette construction.
Correction globale:
- Le compilateur doit effectuer moins de modifications que 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 connexe b. Comme certaines insertions, suppressions et modifications faites de jetons nécessaires pour transformer un en b est le moins 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 fait également référence à l'étude de ces règles, et ce fichier comprend la morphologie, la phonologie et la syntaxe. Il est capable de décrire de nombreux aspects de la syntaxe des langages de programmation.
Règles de grammaire des formes
- Le symbole non terminal doit apparaître à gauche de la au moins une production
- Le symbole de but ne doit jamais être affiché à droite du :: = de toute 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. C'est une séquence arbitraire d'instances de l'élément qui peut être indiquée en entourant l'élément entre accolades suivi d'un astérisque, {…} *.
C'est un choix de l'alternative qui peut utiliser le symbole dans la règle unique. Il peut être placé entre parenthèses ([,]) si nécessaire.
Deux types de zone de conventions de notation Terminal et Non-terminaux
1. terminaux:
- Lettres minuscules de l'alphabet telles que a, b, c,
- Symboles de l'opérateur tels que +, -, *, etc.
- Symboles de ponctuation tels que parenthèses, hachage, virgule
- 0, 1,…, 9 chiffres
- Chaînes en gras comme id ou if, tout ce qui représente un seul symbole de terminal
2.Nonterminaux:
- Lettres majuscules telles que A, B, C
- Noms italiques minuscules: l'expression ou certains
Grammaire sans contexte
Un CFG est une grammaire récursive gauche qui a au moins une production du type. Les règles d'une grammaire sans contexte sont principalement récursives. Un analyseur de syntaxe vérifie que le programme spécifique satisfait ou non à toutes les règles de la grammaire sans contexte. S'il répond, ces analyseurs de syntaxe de règles peuvent créer une arborescence d'analyse pour ce programme.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( 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 sententielle de l'entrée est balayée et remplacée dans la séquence de gauche à droite, elle est connue sous le nom de dérivation la plus à gauche. La forme sententielle dérivée par la dérivation la plus à gauche est appelée la forme sententielle gauche.
Dérivation la plus à droite
Balayer la dérivation la plus à droite et remplacer l'entrée par des règles de production, de droite à gauche, séquence. C'est ce qu'on appelle la dérivation la plus à droite. La forme sententielle qui est dérivée de la dérivation la plus à droite est connue sous le nom de forme sententielle droite.
Syntaxe et analyseur lexical
Analyseur de syntaxe |
Analyseur lexical |
L'analyseur de syntaxe traite principalement des constructions récursives du langage. |
L'analyseur lexical facilite la tâche de l'analyseur de syntaxe. |
L'analyseur de syntaxe fonctionne sur des jetons dans un programme source pour reconnaître des 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, des 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
- Not vous aide à déterminer si une opération effectuée sur un type de jeton est valide ou non
- Vous ne pouvez pas décider que le 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 vient après 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 de bruit, commentaires, délimiteurs, jeu de caractères, identificateurs sont des termes importants utilisés dans l'analyse de syntaxe dans la construction du compilateur
- L'analyse vérifie que la chaîne d'entrée est bien formée, et si ce n'est pas le cas, la rejette
- Les techniques d'analyse sont divisées en deux groupes différents: analyse descendante, analyse ascendante
- Lexique, 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
- Un CFG est une grammaire récursive gauche qui a au moins une production du type
- La dérivation grammaticale est une séquence de règles grammaticales qui transforme le symbole de début en chaîne
- L'analyseur de syntaxe traite principalement des constructions récursives du langage tandis que l'analyseur lexical facilite la tâche de l'analyseur de syntaxe dans le 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