Hva er L-filformatet?
En .l-fil er en spesifikasjon for en leksikalsk analysator skrevet i ren tekst i språket Lex. Den definerer hvordan en strøm av inngangstegn skal deles opp i tokens - det første steget i å bygge en kompilator, tolk eller et tekstbehandlingsverktøy.
Formatet ble laget ved Bell Labs i 1975 av Mike Lesk og Eric Schmidt som en del av Unix-verktøykjeden. I dag blir nesten alle .l-filer behandlet av Flex (Fast Lexical Analyzer), den åpen kildekode-baserte etterfølgeren fra GNU-æraen utviklet av Vern Paxson, selv om syntaksen forblir stort sett den samme.
En .l-fil er delt inn i tre seksjoner separert av %%-markører:
- Definisjoner - navngitte regex-makroer og
%option-direktiver - Regler - par av regulære uttrykk og C-kodehandlinger som utløses ved treff
- Brukerkode - valgfrie C-hjelpefunksjoner som legges til uendret i utdatafilen
En valgfri %{ ... %}-blokk nær toppen injiserer C-deklarasjoner direkte inn i den genererte skanneren. Ved å kjøre flex yourfile.l (eller lex yourfile.l) genereres lex.yy.c, en selvstendig C-kildefil som implementerer skanneren som en deterministisk endelig automat. Denne utdatafilen kompileres med en C-kompilator og lenkes vanligvis med en Yacc/Bison-grammatikkfil for å bygge en komplett språkprosessor.
Merk at .l også brukes for Lisp-kildefiler og Unix troff-manualsider, så filkonteksten er viktig når man identifiserer typen.
Sikkerhet og trygghet
RISIKO: LOWEn .l Lex-kilde er ren tekst og trygg å åpne i et redigeringsprogram. Den eneste advarselen: reglene inneholder C-kode, og en ondsinnet .l-fil kan inneholde skadelig C-kode som kjøres når den er kompilert. Se gjennom .l-filer fra upålitelige kilder før du kjører flex og bygger dem.
Formatdetaljer
i et nøtteskall- Lisp-kildefil (.l) - Noen Lisp-dialekter/implementasjoner bruker .l for kildekode; ren tekst, men et annet språk enn Lex.
- Unix man-page / troff-kilde (.l) - Seksjon-l (lokale) manualsider i nroff/troff-kilde; dokumentasjon, ikke en skannerspesifikasjon.
- Interleaf / WordPerfect-bibliotek (.l) - Eldre biblioteks- eller listefiler i gamle dokumentsystemer; sjelden.
Programmer som åpner L-filer
Tekniske detaljer
dyp spesifikasjon| Format-type | Spesifikasjon for leksikalsk analysator i ren tekst (kildekode) |
| Koding | ASCII / UTF-8 ren tekst; ingen binær header eller magic bytes |
| Filstruktur | Tre seksjoner separert av `%%`: definisjoner, regler og bruker-C-kode |
| Seksjon 1 - Definisjoner | Navngitte regex-makroer og `%option`-direktiver (f.eks. `%option noyywrap`) |
| Seksjon 2 - Regler | Par av regulære uttrykk og C-kodeblokker som utføres ved treff |
| Seksjon 3 - Brukerkode | Valgfrie C-hjelpefunksjoner kopiert uendret inn i den genererte utdatafilen |
| C-kode injeksjonsblokk | `%{ ... %}`-prolog nær toppen injiserer C-deklarasjoner i den genererte skanneren |
| Primær utdata | `lex.yy.c` - en C-kildefil som implementerer en DFA-basert skanner |
| MIME-type | `text/plain` (uformelt alias: `text/x-lex`) |
| Behandlingsverktøy | `lex` (AT&T/POSIX), `flex` (GNU), `win_flex` (Windows via WinFlexBison) |
| Typisk filstørrelse | 1 KB - 100 KB |
| Skanneralgoritme | Kompilerer regex-regler til en deterministisk endelig automat (DFA) ved bygging |
| Vanlig paring | Kombineres med en `.y` Yacc- eller Bison-grammatikkfil for å bygge en komplett kompilator-frontend |
| Plattformstøtte | Unix, Linux, macOS innebygd; Windows via MSYS2, Cygwin eller WinFlexBison |
| Endelses-ambiguitet | `.l` brukes også for Lisp-kildefiler og Unix troff-manualsider - filkontekst er nødvendig |
| Utgitt | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| Siste versjon | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | pubs.opengroup.org |
L-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om L-filer.