当前位置:网站首页>Flex & Bison Start

Flex & Bison Start

2022-06-25 23:06:00 Gocodingmyway

Flex Avec Bison Est un outil spécialement conçu pour les programmeurs de compilateurs et d'interpréteurs:

  • Flex Pour l'analyse lexicale(lexical analysis,Ou scanning),Diviser les entrées en morceaux significatifs,Appelé marque(token).
  • Bison Pour l'analyse grammaticale(syntax analysis,Ou parsing),Déterminez comment ces marques sont liées les unes aux autres.

Par exemple,Voici le fragment de code:

alpha = beta + gamma;

.L'analyse lexicale décompose ce code en quelques - unes de ces marques:alpha, =, beta, +, gamma, ;.Puis l'analyse grammaticale a déterminé beta + gamma Est une expression,Et cette expression a été assignée à alpha.

Mais plus tard, ils se sont avérés très efficaces dans d'autres domaines d'application.Toute application,Traitement de texte en particulier,Il suffit de trouver un mode particulier dans son entrée,Ou il utilise le langage de commande comme entrée,Tous adaptés à l'utilisation Flex Avec Bison.

Par exemple,SQL Analyse:

Dans la structure du compilateur ,Analyseur lexical、 L'analyseur est la partie principale de l'avant du compilateur . La plupart des compilateurs sont organisés en trois étapes principales :Front End、 Optimiseur et back - end . La première ligne se concentre sur la compréhension des programmes de langue source , Convertir en une sorte de représentation intermédiaire (IR).Et Flex Avec Bison Est l'outil conçu pour l'avant du compilateur .

Origine

bison De yacc,Un par Stephen C. Johnson À 1975 Année 1978 Générateur d'Analyseurs terminé au laboratoire Bell au cours de l'année .Comme son nom(yacc - Oui. yet another compiler compiler Abréviation de)Ce que ça implique, À cette époque, beaucoup de gens écrivaient des générateurs d'Analyseurs .Johnson Basé sur D. E. Knuth Théorie de l'analyse grammaticale étudiée (Donc, yacc Très fiable) Et une syntaxe d'entrée pratique .Ce qui rend yacc In Unix Très populaire parmi les utilisateurs ,Bien que Unix Le droit d'auteur restreint qu'il suit le rend disponible uniquement dans le milieu universitaire et le système Bell .À peu près à 1985 Année,Bob Corbett, Un étudiant diplômé de l'Université de Californie à Berkeley , Réalisé à nouveau avec un algorithme interne amélioré yacc Et est devenu Berkeley yacc. Parce que cette version est plus yacc Plus rapide et avec une licence Berkeley flexible , Il est rapidement devenu le plus populaire yacc. De la Free Software Foundation (Free Software Foundation)De Richard Stallman Réécrit Corbett Et l'utiliser pour GNU Dans le projet,Là - Bas, Il a été ajouté à un grand nombre de nouvelles fonctionnalités et a évolué vers le présent bison.bison Maintenant FSF A été maintenu , Et il est basé sur GNU Délivrance de licences publiques .

In 1975 Année,Mike Lesk Et stagiaires d'été Eric Schmidt C'est écrit. lex, Un générateur d'analyseur lexical , La plupart des travaux de programmation sont effectués par Schmidt Terminé..Ils ont découvert lex Peut être utilisé comme un outil autonome ,Peut également être utilisé comme Johnson De yacc Programme de collaboration .lex C'est devenu très populaire. , Bien qu'il fonctionne un peu lentement et qu'il y ait beaucoup d'erreurs .(Mais Schmidt Plus tard, j'a I eu une carrière très réussie dans l'industrie informatique. ,Il est là.,2009Année,- Oui. Google De CEO.2010 Année CEO Transfert ,Continue. Google Président du Conseil.)

Probablement 1987 Année,Lawrence Berkeley De laboratoire Vern Paxson Utiliser un ratfor( Une sorte d'expansion populaire à l'époque Fortran Langues)C'est écrit lex Version réécrite en C Langue,Appelé flex,Ça veut dire...“ Générateur d'analyseur lexical rapide ”(Fast Lexical Analyzer Generator). Parce que c'est plus AT&T De lex Plus rapide et plus fiable , Et comme à Berkeley. yacc C'est basé sur la licence de Berkeley. , Il a finalement dépassé l'original. lex.flex Maintenant, oui. SourceForge Un projet, Toujours basé sur la licence Berkeley .

Installation

La plupart Linux Et BSD Le système est livré avec flex Et bison En tant que partie fondamentale du système . Si votre système ne les contient pas , Ils sont faciles à installer .

Par exemple, dans Ubuntu/Debian Système,Ça pourrait être direct apt Installation:

# Ubuntu 20
$ sudo apt install flex bison -y

$ flex -V
flex 2.6.4
$ bison -V
bison (GNU Bison) 3.5.1

Exemple

Pour des exemples, voir https://github.com/ikuokuo/start-ai-compiler/tree/main/books/flex_bison , Tout vient de la conclusion. Flex & Bison Un livre.

Les exemples nous montrent comment utiliser Flex & Bison Développer une calculatrice, Et peut supporter des variables 、Processus、 Boucles et expressions conditionnelles ,Il y a des fonctions intégrées, Les fonctions personnalisées de l'utilisateur sont également prises en charge .

Compiler tous les exemples comme suit :

cd books/flex_bison/

# Compiler release
make
# Compiler debug
make debug

# Nettoyage
make clean

Exemple de programme produit dans _build Table des matières,Exécuter comme suit:

$ ./_build/linux-x86_64/release/1-5_calc/bin/1-5_calc
> (1+2)*3 + 4/2
= 11

$ ./_build/linux-x86_64/release/3-5_calc/bin/3-5_calc
> let sq(n)=e=1; while |((t=n/e)-e)>.001 do e=avg(e,t);;
Defined sq
> let avg(a,b)=(a+b)/2;
Defined avg
> sq(10)
= 3.162
> sqrt(10)
= 3.162
> sq(10)-sqrt(10)
= 0.000178

Si vous ne compilez qu'une seule instance :

cd ch01/1-1_wc/

# Compiler release
make -j8
# Compiler debug
make -j8 args="debug"

# Nettoyage
make clean

Procédure

Flex Avec Bison La procédure se compose de trois parties :Section des définitions、 Section des règles et sous - programme utilisateur .

... definition section ...
%%
... rules section ...
%%
... user subroutines section ...

Flex La partie des règles est basée sur des expressions régulières ,Bison Basé sur BNF (Backus-Naur Form) Grammaire.Utilisation détaillée, Veuillez suivre les conclusions Flex & Bison Un livre, Et des exemples .

Il n'y a pas beaucoup d'explications ici, Le but de cet article est de vous faire comprendre que Flex Avec Bison Cet outil , Et ce qu'ils peuvent nous aider à faire .

Conclusion

Flex Avec Bison C'est un analyseur lexical.(Scanner)Avec l'analyseur(Parser) Outils de génération automatique pour , Résultats de l'application de la théorie du langage formel . Ces outils sont également disponibles pour la recherche de texte 、 Filtrage du site 、 Traitement de texte et interpréteur de langue en ligne de commande .

Le contenu de cet article provient principalement des livres suivants: :

GoCoding Partage d'expériences dans la pratique personnelle,Attention au numéro public!

原网站

版权声明
本文为[Gocodingmyway]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/176/202206252136008582.html