- afficher (3 * entier)+4;
- entier = 2;
- booleen = booleen et vrai;
- booleen = vrai et non faux;
- afficher booleen;
- booleen = non booleen;
- afficher booleen;
My Projects Courses Writings
Source Code Social Networks |
Analyse sémantiqueCréer son propre langage de programmation de A à Z<< Analyseur syntaxique | Analyse sémantique | Arbre syntaxique et Génération de code >> Nous allons utiliser une structure de données pour vérifier que les variables ont bien été déclarées et qu'elles possèdent une valeur pour qu'elles soient utilisées dans des expressions. On vérifiera aussi le typage des variables. Bien que l'analyse syntaxique le fait, j'ai quand même trouvé utile de faire la vérification à l'analyse sémantique. Mon code vous permettra facilement de faire évoluer le langage Simple si un jour vous ne voulez plus être imposé par le renommage des variables. La structure de données adoptée, car idéale me semble-t-il, est la table de hachage. Nous allons utiliser pour cela la librairie GLib. Cela nous assure une certaine fiabilité et surtout nous évite de coder une table de hachage. La table aura pour clés les noms des variables créées et comme valeur associée une structure que j'ai créée. La structure a comme membre le nom du type de la variable (char*) et un pointeur générique vers la valeur de la variable (void*). Il n'existe pas de générateur d'analyseur sémantique et nous ne touchons pas à l'analyseur lexical. Les tests de sémantique se feront dans le même temps que l'analyse syntaxique. Nous allons donc modifier notre code Bison. Voici le joli code : syntaxe_simple.y
Compilons tout les fichiers : flex -o lexique_simple.c lexique_simple.lex bison -d syntaxe_simple.y gcc lexique_simple.c syntaxe_simple.tab.c `pkg-config --cflags --libs glib-2.0` -o simple Testons avec un programme semantiquement incorrect avec des variables non declarées : programme_faux.simple
Résultat : Debut de l'analyse syntaxique : Nombre : 3 Variable entiere entier ERREUR : Erreur de semantique a la ligne 1. Variable entier jamais declaree ! Multiplication C'est une expression artihmetique entre parentheses Nombre : 4 Addition Affichage de la valeur de l'expression (3*entier)+4 Instruction type Affichage Resultat : C'est une instruction valide ! Variable entiere entier Nombre : 2 Affectation sur la variable entier Instruction type Affectation Resultat : C'est une instruction valide ! Variable booleenne booleen Variable booleenne booleen ERREUR : Erreur de semantique a la ligne 3. Variable booleen jamais declaree ! Booleen Vrai Operation booleenne Et Affectation sur la variable booleen Instruction type Affectation Resultat : C'est une instruction valide ! Variable booleenne booleen Booleen Vrai Booleen Faux Operation booleenne Non Operation booleenne Et Affectation sur la variable booleen Instruction type Affectation Resultat : C'est une instruction valide ! Variable booleenne booleen Affichage de la valeur de l'expression booleen Instruction type Affichage Resultat : C'est une instruction valide ! Variable booleenne booleen Variable booleenne booleen Operation booleenne Non Affectation sur la variable booleen Instruction type Affectation Resultat : C'est une instruction valide ! Variable booleenne booleen Affichage de la valeur de l'expression booleen Instruction type Affichage Resultat : C'est une instruction valide ! Fin de l'analyse ! Resultat : -- Succes a l'analyse lexicale ! -- -- Succes a l'analyse syntaxique ! -- -- Echec : Certaines phrases sont semantiquement incorrectes ! -- -- Echec a l'analyse semantique -- L'analyse sémantique a bien été mise en échec. Reprenons le programme testé et remettons les instructions dans le bon ordre pour avoir un sens logique : programme.simple
Résultat : Debut de l'analyse syntaxique : Variable entiere entier Nombre : 2 Affectation sur la variable entier Instruction type Affectation Resultat : C'est une instruction valide ! Nombre : 3 Variable entiere entier Multiplication C'est une expression artihmetique entre parentheses Nombre : 4 Addition Affichage de la valeur de l'expression (3*entier)+4 Instruction type Affichage Resultat : C'est une instruction valide ! Variable booleenne booleen Booleen Vrai Booleen Faux Operation booleenne Non Operation booleenne Et Affectation sur la variable booleen Instruction type Affectation Resultat : C'est une instruction valide ! Variable booleenne booleen Variable booleenne booleen Booleen Vrai Operation booleenne Et Affectation sur la variable booleen Instruction type Affectation Resultat : C'est une instruction valide ! Variable booleenne booleen Affichage de la valeur de l'expression booleen Instruction type Affichage Resultat : C'est une instruction valide ! Variable booleenne booleen Variable booleenne booleen Operation booleenne Non Affectation sur la variable booleen Instruction type Affectation Resultat : C'est une instruction valide ! Variable booleenne booleen Affichage de la valeur de l'expression booleen Instruction type Affichage Resultat : C'est une instruction valide ! Fin de l'analyse ! Resultat : -- Succes a l'analyse lexicale ! -- -- Succes a l'analyse syntaxique ! -- -- Succes a l'analyse semantique ! -- Maintenant que nous avons fait les 3 analyses, nous allons pouvoir passer à la dernière étape de la compilation : la génération du code. Je vous dis donc à tout de suite au prochain chapitre. << Analyseur syntaxique | Analyse sémantique | Arbre syntaxique et Génération de code >> |
Page last modified on July 09, 2017, at 07:39 PM EST
This page has been requested 5002 times (Today : 5) - Total number of requests : 263635
Edit - History - Statistics - Print - Recent Changes - Search
Clin d'oeil aux victimes des attentats survenus dans la soirée du 13 novembre 2015. La nouvelle version du site a été installée quelques heures avant.