Hvad er L-filformatet?
En .l-fil er en leksikalsk analysator-specifikation i almindelig tekst skrevet i Lex-sproget. Den definerer, hvordan en indgående tegnstrøm skal opdeles i tokens - det første skridt i opbygningen af en compiler, interpreter eller et tekstbehandlingsværktøj.
Formatet blev skabt hos Bell Labs i 1975 af Mike Lesk og Eric Schmidt som en del af Unix-værktøjskæden. I dag behandles stort set alle .l-filer af Flex (Fast Lexical Analyzer), den open source-efterfølger fra GNU-æraen udviklet af Vern Paxson, selvom kildesyntaksen stort set er den samme.
En .l-fil er opdelt i tre sektioner adskilt af %%-markeringslinjer:
- Definitioner - navngivne regex-makroer og
%option-direktiver - Regler - par af regulære udtryk og C-handlingskode, der aktiveres ved et match
- Brugerkode - valgfrie hjælpefunktioner i C, der tilføjes ordret til outputtet
En valgfri %{ ... %}-blok nær toppen indsætter C-erklæringer direkte i den genererede scanner. Kørsel af flex dinfil.l (eller lex dinfil.l) producerer lex.yy.c, en selvstændig C-kildefil, der implementerer scanneren som en deterministisk endelig automat. Dette output compiles med en C-compiler og linkes typisk med en Yacc/Bison-grammatikfil for at bygge en komplet sprogprocessor.
Bemærk, at .l også bruges til Lisp-kildefiler og Unix troff-manualsider, så filkonteksten er vigtig, når typen skal identificeres.
Sikkerhed og tryghed
RISIKO: LOWEn .l Lex-kilde er almindelig tekst og sikker at åbne i en editor. Den eneste advarsel: reglerne indeholder C-handlingskode, og en ondsindet .l-fil kan indeholde skadelig C, der kører, når den er compiled. Gennemse .l-filer fra upålidelige kilder, før du kører flex og bygger dem.
Formatdetaljer
kort fortalt- Lisp-kildefil (.l) - Nogle Lisp-dialekter/implementeringer bruger .l til kildekode; almindelig tekst, men et andet sprog end Lex.
- Unix man-side / troff-kilde (.l) - Sektion-l (lokale) manualsider i nroff/troff-kilde; dokumentation, ikke en lexer-specifikation.
- Interleaf / WordPerfect-bibliotek (.l) - Ældre biblioteks- eller listefiler i ældre dokumentsystemer; sjælden.
Programmer der åbner L-filer
Tekniske detaljer
dyb specifikation| Format-type | Leksikalsk analysator-specifikation i almindelig tekst (kildekode) |
| Kodning | ASCII / UTF-8 almindelig tekst; ingen binær header eller magic bytes |
| Filstruktur | Tre sektioner adskilt af `%%`: definitioner, regler og bruger-C-kode |
| Sektion 1 - Definitioner | Navngivne regex-makroer og `%option`-direktiver (f.eks. `%option noyywrap`) |
| Sektion 2 - Regler | Par af regulære udtryksmønstre og C-handlingskodeblokke, der udføres ved match |
| Sektion 3 - Brugerkode | Valgfrie C-hjælpefunktioner kopieret ordret ind i den genererede outputfil |
| C-kode-injektionsblok | `%{ ... %}` prolog nær toppen indsætter C-erklæringer i den genererede scanner |
| Primært output | `lex.yy.c` - en C-kildefil, der implementerer en DFA-baseret scanner |
| MIME-type | `text/plain` (uformelt alias: `text/x-lex`) |
| Behandlingsværktøjer | `lex` (AT&T/POSIX), `flex` (GNU), `win_flex` (Windows via WinFlexBison) |
| Typisk filstørrelse | 1 KB - 100 KB |
| Scanner-algoritme | Compilerer regex-regler til en deterministisk endelig automat (DFA) ved byggetid |
| Almindelig parring | Kombineret med en `.y` Yacc- eller Bison-grammatikfil for at bygge en komplet compiler-frontend |
| Platformunderstøttelse | Unix, Linux, macOS indfødt; Windows via MSYS2, Cygwin eller WinFlexBison |
| Udvidelses-tvetydighed | `.l` bruges også til Lisp-kildefiler og Unix troff man-side-kilde - filkontekst påkrævet |
| Udgivet | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| Seneste version | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| Åben standard | Ja · royaltyfri |
| Specifikation | pubs.opengroup.org |
L-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om L-filer.