Dans la section du haut, la partie%{... %} est copiée telle quelle vers le fichier calculette. h. Les symboles terminaux ne sont pas copiés littéralement de la sorte. Ils sont exploités de deux façons: Ils seront reportés dans calculette. h pour que l'analyseur lexical sache signaler les symboles terminaux. Les mots-clefs%left, %right ne concernent que l'analyseur syntaxique, pour résoudre les conflits de priorité shift/reduce. Flex (générateur d'analyseur lexical) - Flex (lexical analyser generator) - abcdef.wiki. Le fichier calc_flex. l pour Flex Entre autres choses que le fichier C produit par Flex s'attend à trouver dans le fichier calculette. h produit par Bison: Le type YYSTYPE pour la variable yylval qu'il remplit à chaque terminal trouvé. Selon les cas, le parseur produit par Bison se chargera de le traduire en $$ $1 $2... Les valeurs numériques que Bison a attribuées aux symboles terminaux qu'on lui a indiqués, i. e. ENTIER PLUS MOINS... %{ #include "calculette. h"%}%option noyywrap blanks [ \t\n]+ entier [0-9]+ plus \+ moins \- fois \* divise \/ ouvrir \( fermer \)%% {blanks} { /* ignore */} {entier} { yylval = atoi(yytext); return(ENTIER);} {plus} { return(PLUS);} {moins} { return(MOINS);} {fois} { return(FOIS);} {divise} { return(DIVISE);} {ouvrir} { return(OUVRIR);} {fermer} { return(FERMER);} Quelques remarques: L'option noyywrap fournie en début de fichier évite de s'embêter avec la fonction yywrap (seulement utile lorsque l'entrée est répartie sur plusieurs fichiers).
Structure de base du programme:%{ // Definitions%}%% Rules%% User code section Comment exécuter le programme: Pour exécuter le programme, il doit d'abord être enregistré avec l'extension. l ou. Exécutez les commandes ci-dessous sur le terminal afin d'exécuter le fichier programme. Étape 1: lex nom_fichier. l ou lex selon l'extension, le fichier est enregistré avec Étape 2: gcc Étape 3:. / Étape 4: Fournissez l'entrée au programme au cas où cela serait nécessaire Remarque: appuyez sur Ctrl+D ou utilisez une règle pour arrêter de prendre les entrées de l'utilisateur. Veuillez voir les images de sortie des programmes ci-dessous pour effacer en cas de doute pour exécuter les programmes. Analyseur lexical avec flex. Exemple 1: compter le nombre de caractères d'une string /*** Definition Section has one variable which can be accessed inside yylex() and main() ***/%{ int count = 0;%} /*** Rule Section has three rules, first rule matches with capital letters, second rule matches with any character except newline and third rule does not take input after the enter***/%% [A-Z] {printf("%s capital letter\n", yytext); count++;}.
Sitemap | wwropasx.ru, 2024