- monEntier = 6 ; monBooleen = faux ;
- afficher monEntier ;
- afficher monBooleen ;
- afficher 4 ;
- afficher non ( ( vrai et faux ) ou vrai ) ;
- afficher 6/3 ;
- @#!%^$
My Projects Courses Writings
Source Code Social Networks |
Analyseur lexical FlexCréer son propre langage de programmation de A à Z<< Syntaxe du langage Simple | Analyseur lexical | Analyseur syntaxique >> On va passer maintenant au côté pratique. Nous pouvons commencer le développement du compilateur. Pour rappel la première chose que fait un compilateur est l'analyse lexicale. C'est donc là que nous allons commencer. Nous allons utiliser Flex qui générera un analyseur lexical pour le langage Simple. Je vous donne le code de Flex un peu à la dure. Mais je juge l'avoir suffisamment bien commenté pour le comprendre. On commence par créer un fichier lexique_simple.lex qui contiendra le code suivant : lexique_simple.lex
On compile notre fichier Flex : flex -o lexique_simple.c lexique_simple.lex Flex génère une source C qui contient la fonction yylex(). Ici je lui ai demandé à la compilation que le nom de fichier sorti soit lexique_simple.c. Sinon par défaut le fichier de sortie s'appelle yy.lex.c. On peut aussi le spécifier en option dans le code flex. On compile maintenant le fichier C généré : gcc -o lexique_simple lexique_simple.c On obtient alors un exécutable. C'est notre analyseur lexicale du langage Simple prêt à tourner ! Créons maintenant un fichier programme.simple où on va écrire un programme en Simple. On va volontairement mettre des caractères spéciaux à la dernière ligne. Il devrait nous avertir des erreurs lexicales. programme.simple
On donne ce programme à notre analyseur lexicale : ./lexique_simple < programme.simple L'analyseur nous renvoit tout les lexèmes qu'il a reconnu un par un. A chaque instruction il fait un saut de ligne. Debut de l'analyse lexicale : Variable trouvee a la ligne 1. Il s'agit de monEntier et comporte 9 lettre(s) Lexeme '=' trouve a la ligne 1 Nombre trouve a la ligne 1. Il s'agit du nombre 6 et comporte 1 chiffre(s) Lexeme ';' trouve a la ligne 1 Variable trouvee a la ligne 1. Il s'agit de monBooleen et comporte 10 lettre(s) Lexeme '=' trouve a la ligne 1 Lexeme 'faux' trouve a la ligne 1 Lexeme ';' trouve a la ligne 1 Lexeme 'afficher' trouve a la ligne 3 Variable trouvee a la ligne 3. Il s'agit de monEntier et comporte 9 lettre(s) Lexeme ';' trouve a la ligne 3 Lexeme 'afficher' trouve a la ligne 4 Variable trouvee a la ligne 4. Il s'agit de monBooleen et comporte 10 lettre(s) Lexeme ';' trouve a la ligne 4 Lexeme 'afficher' trouve a la ligne 5 Nombre trouve a la ligne 5. Il s'agit du nombre 4 et comporte 1 chiffre(s) Lexeme ';' trouve a la ligne 5 Lexeme 'afficher' trouve a la ligne 6 Lexeme 'non' trouve a la ligne 6 Lexeme '(' trouve a la ligne 6 Lexeme '(' trouve a la ligne 6 Lexeme 'vrai' trouve a la ligne 6 Lexeme 'et' trouve a la ligne 6 Lexeme 'faux' trouve a la ligne 6 Lexeme ')' trouve a la ligne 6 Lexeme 'ou' trouve a la ligne 6 Lexeme 'vrai' trouve a la ligne 6 Lexeme ')' trouve a la ligne 6 Lexeme ';' trouve a la ligne 6 Lexeme 'afficher' trouve a la ligne 7 Nombre trouve a la ligne 7. Il s'agit du nombre 6 et comporte 1 chiffre(s) Lexeme '/' trouve a la ligne 7 Nombre trouve a la ligne 7. Il s'agit du nombre 3 et comporte 1 chiffre(s) Lexeme ';' trouve a la ligne 7 ERREUR : Lexeme inconnu a la ligne 9. Il s'agit de @ et comporte 1 lettre(s) ERREUR : Lexeme inconnu a la ligne 9. Il s'agit de # et comporte 1 lettre(s) ERREUR : Lexeme inconnu a la ligne 9. Il s'agit de ! et comporte 1 lettre(s) ERREUR : Lexeme inconnu a la ligne 9. Il s'agit de % et comporte 1 lettre(s) ERREUR : Lexeme inconnu a la ligne 9. Il s'agit de ^ et comporte 1 lettre(s) ERREUR : Lexeme inconnu a la ligne 9. Il s'agit de $ et comporte 1 lettre(s) Fin de fichier detecte ! Fin de l'analyse ! Resultat : -- Echec : Certains lexemes ne font pas partie du lexique du langage ! -- Les derniers caractères spéciaux n'ont pas été reconnu. Il ne font pas partie de l'ensemble des terminaux de Simple. Le programme ne passe pas à l'analyse lexicale (la première étape de la compilation). Créons maintenant un second fichier contenant des instructions sans aucun sens et ne répondant pas à la syntaxe de Simple : programme_faux.simple
Passons ce fichier à notre analyseur lexical. ./lexique_simple < programme_faux.simple Le résultat de l'analyse est le suivant : Debut de l'analyse lexicale : Nombre trouve a la ligne 1. Il s'agit du nombre 68 et comporte 2 chiffre(s) Lexeme 'afficher' trouve a la ligne 1 Lexeme ';' trouve a la ligne 1 Variable trouvee a la ligne 2. Il s'agit de france et comporte 6 lettre(s) Variable trouvee a la ligne 2. Il s'agit de japon et comporte 5 lettre(s) Variable trouvee a la ligne 2. Il s'agit de usa et comporte 3 lettre(s) Lexeme '=' trouve a la ligne 2 Nombre trouve a la ligne 2. Il s'agit du nombre 85 et comporte 2 chiffre(s) Lexeme ';' trouve a la ligne 2 Variable trouvee a la ligne 3. Il s'agit de ecrire et comporte 6 lettre(s) Nombre trouve a la ligne 3. Il s'agit du nombre 78 et comporte 2 chiffre(s) Lexeme 'et' trouve a la ligne 3 Nombre trouve a la ligne 3. Il s'agit du nombre 49 et comporte 2 chiffre(s) Variable trouvee a la ligne 4. Il s'agit de japon et comporte 5 lettre(s) Lexeme '=' trouve a la ligne 4 Nombre trouve a la ligne 4. Il s'agit du nombre 118 et comporte 3 chiffre(s) Lexeme 'et' trouve a la ligne 4 Lexeme 'afficher' trouve a la ligne 4 Variable trouvee a la ligne 4. Il s'agit de japon et comporte 5 lettre(s) Lexeme ';' trouve a la ligne 4 Lexeme 'vrai' trouve a la ligne 5 Lexeme '+' trouve a la ligne 5 Lexeme 'faux' trouve a la ligne 5 Lexeme '=' trouve a la ligne 5 Nombre trouve a la ligne 5. Il s'agit du nombre 19 et comporte 2 chiffre(s) Lexeme ';' trouve a la ligne 5 Fin de fichier detecte ! Fin de l'analyse ! Resultat : -- Succes ! -- L'analyseur a sans surprise reconnu tout les mots. Le fichier passe bien à l'analyse lexicale. Cependant on voit bien que la syntaxe n'est pas du tout bonne, elle ne respecte clairement pas la grammaire de Simple défini au chapitre précédent. L'analyse lexicale ne suffit donc pas pour faire de la compilation. Il est essentiel de faire une analyse syntaxique. C'est ce que nous allons tout de suite voir au chapitre suivant. << Syntaxe du langage Simple | Analyseur lexical | Analyseur syntaxique >> |
Page last modified on July 09, 2017, at 07:33 PM EST
This page has been requested 9269 times (Today : 7) - Total number of requests : 221366
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.