Qu'est-ce que le format de fichier L ?
Un fichier .l est une spécification d'analyseur lexical en texte brut écrite dans le langage Lex. Il définit comment un flux de caractères d'entrée doit être décomposé en jetons (tokens) - la première étape de la construction d'un compilateur, d'un interprète ou d'un outil de traitement de texte.
Le format a été créé aux Bell Labs en 1975 par Mike Lesk et Eric Schmidt dans le cadre de la chaîne d'outils Unix. Aujourd'hui, pratiquement tous les fichiers .l sont traités par Flex (Fast Lexical Analyzer), le successeur open-source de l'ère GNU développé par Vern Paxson, bien que la syntaxe source reste largement la même.
Un fichier .l est divisé en trois sections séparées par des lignes de marquage %% :
- Définitions - macros regex nommées et directives
%option - Règles - paires d'expressions régulières et de code d'action C qui s'exécutent lors d'une correspondance
- Code utilisateur - fonctions C auxiliaires optionnelles ajoutées textuellement à la sortie
Un bloc optionnel %{ ... %} près du sommet injecte des déclarations C directement dans le scanner généré. L'exécution de flex votre_fichier.l (ou lex votre_fichier.l) produit lex.yy.c, un fichier source C autonome implémentant le scanner sous forme d'automate fini déterministe. Cette sortie est compilée avec un compilateur C et généralement liée à un fichier de grammaire Yacc/Bison pour construire un processeur de langage complet.
Notez que .l est également utilisé pour les fichiers sources Lisp et les sources de pages de manuel troff Unix, le contexte du fichier est donc important pour identifier son type.
Sécurité et sûreté
RISQUE : LOWUne source Lex .l est en texte brut et peut être ouverte en toute sécurité dans un éditeur. Seule mise en garde : les règles contiennent du code d'action C, et un fichier .l malveillant pourrait intégrer du code C nuisible qui s'exécute une fois compilé. Examinez les fichiers .l provenant de sources non fiables avant d'exécuter flex et de les compiler.
Détails du format
en bref- Fichier source Lisp (.l) - Certains dialectes/implémentations Lisp utilisent .l pour le code source ; texte brut, mais un langage différent de Lex.
- Source de page de manuel Unix / troff (.l) - Pages de manuel de la section-l (locale) en source nroff/troff ; documentation, pas une spécification de lexeur.
- Bibliothèque Interleaf / WordPerfect (.l) - Fichiers de bibliothèque ou de liste hérités dans d'anciens systèmes de documents ; rare.
Programmes qui ouvrent les fichiers L
Détails techniques
spécifications approfondies| Type de format | Spécification d'analyseur lexical en texte brut (code source) |
| Encodage | Texte brut ASCII / UTF-8 ; pas d'en-tête binaire ou d'octets magiques |
| Structure du fichier | Trois sections séparées par « %% » : définitions, règles et code C utilisateur |
| Section 1 - Définitions | Macros regex nommées et directives « %option » (ex: « %option noyywrap ») |
| Section 2 - Règles | Paires de motifs d'expressions régulières et de blocs de code d'action C exécutés lors d'une correspondance |
| Section 3 - Code utilisateur | Fonctions auxiliaires C optionnelles copiées textuellement dans le fichier de sortie généré |
| Bloc d'injection de code C | Le prologue « %{ ... %} » près du sommet injecte des déclarations C dans le scanner généré |
| Sortie principale | « lex.yy.c » - un fichier source C implémentant un scanner basé sur un DFA |
| Type MIME | « text/plain » (alias informel : « text/x-lex ») |
| Outils de traitement | « lex » (AT&T/POSIX), « flex » (GNU), « win_flex » (Windows via WinFlexBison) |
| Taille typique du fichier | 1 Ko - 100 Ko |
| Algorithme du scanner | Compile les règles regex en un automate fini déterministe (DFA) au moment de la construction |
| Couplage courant | Combiné avec un fichier de grammaire Yacc ou Bison « .y » pour construire un frontal de compilateur complet |
| Prise en charge des plateformes | Unix, Linux, macOS nativement ; Windows via MSYS2, Cygwin ou WinFlexBison |
| Ambiguïté de l'extension | « .l » est également utilisé pour les fichiers sources Lisp et les sources de pages de manuel troff Unix - contexte du fichier requis |
| Publié | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| Dernière version | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| Standard ouvert | Oui · libre de droits |
| Spécification | pubs.opengroup.org |
Conversions L
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers L.