Wat is het L-bestandsformaat?
Een .l-bestand is een platte-tekstspecificatie voor een lexicale analyzer, geschreven in de Lex-taal. Het definieert hoe een invoerstroom van tekens moet worden opgesplitst in tokens - de eerste stap bij het bouwen van een compiler, interpreter of tekstverwerkingstool.
Het formaat werd in 1975 bij Bell Labs gecreëerd door Mike Lesk en Eric Schmidt als onderdeel van de Unix-toolchain. Tegenwoordig worden vrijwel alle .l-bestanden verwerkt door Flex (Fast Lexical Analyzer), de open-source opvolger uit het GNU-tijdperk ontwikkeld door Vern Paxson, hoewel de bronsyntaxis grotendeels hetzelfde is gebleven.
Een .l-bestand is verdeeld in drie secties, gescheiden door %%-markeringsregels:
- Definities - benoemde regex-macro's en
%option-richtlijnen - Regels - paren van reguliere expressies en C-actiecode die worden uitgevoerd bij een match
- Gebruikerscode - optionele C-hulpfuncties die letterlijk aan de uitvoer worden toegevoegd
Een optioneel %{ ... %}-blok bovenaan injecteert C-declaraties rechtstreeks in de gegenereerde scanner. Het uitvoeren van flex yourfile.l (of lex yourfile.l) produceert lex.yy.c, een zelfstandig C-bronbestand dat de scanner implementeert als een deterministische eindige automaat. Die uitvoer wordt gecompileerd met een C-compiler en doorgaans gekoppeld aan een Yacc/Bison-grammaticabestand om een volledige taalprocessor te bouwen.
Let op dat .l ook wordt gebruikt voor Lisp-bronbestanden en Unix troff-handleidingspagina's, dus de context van het bestand is belangrijk bij het identificeren van het type.
Beveiliging & veiligheid
RISICO: LOWEen .l Lex-bronbestand is platte tekst en veilig te openen in een editor. De enige waarschuwing: de regels bevatten C-actiecode, en een kwaadaardig .l-bestand zou schadelijke C-code kunnen bevatten die wordt uitgevoerd zodra deze is gecompileerd. Controleer .l-bestanden van onbetrouwbare bronnen voordat u flex uitvoert en ze bouwt.
Formaatdetails
in een notendop- Lisp-bronbestand (.l) - Sommige Lisp-dialecten/implementaties gebruiken .l voor broncode; platte tekst, maar een andere taal dan Lex.
- Unix man-pagina / troff-bron (.l) - Sectie-l (lokale) handleidingspagina's in nroff/troff-broncode; documentatie, geen lexerspecificatie.
- Interleaf / WordPerfect-bibliotheek (.l) - Verouderde bibliotheek- of lijstbestanden in oudere documentsystemen; zeldzaam.
Programma's die L-bestanden openen
Technische details
diepe specificaties| Formaattype | Platte-tekstspecificatie voor lexicale analyzer (broncode) |
| Codering | ASCII / UTF-8 platte tekst; geen binaire header of magic bytes |
| Bestandsstructuur | Drie secties gescheiden door `%%`: definities, regels en C-gebruikerscode |
| Sectie 1 - Definities | Benoemde regex-macro's en `%option`-richtlijnen (bijv. `%option noyywrap`) |
| Sectie 2 - Regels | Paren van reguliere expressiepatronen en C-actiecodeblokken uitgevoerd bij een match |
| Sectie 3 - Gebruikerscode | Optionele C-hulpfuncties die letterlijk in het gegenereerde uitvoerbestand worden gekopieerd |
| C-code injectieblok | De `%{ ... %}`-proloog bovenaan injecteert C-declaraties in de gegenereerde scanner |
| Primaire uitvoer | `lex.yy.c` - een C-bronbestand dat een op DFA gebaseerde scanner implementeert |
| MIME-type | `text/plain` (informele alias: `text/x-lex`) |
| Verwerkingstools | `lex` (AT&T/POSIX), `flex` (GNU), `win_flex` (Windows via WinFlexBison) |
| Typische bestandsgrootte | 1 KB - 100 KB |
| Scanner-algoritme | Compileert regex-regels naar een deterministische eindige automaat (DFA) tijdens het bouwen |
| Veelvoorkomende koppeling | Gecombineerd met een `.y` Yacc- of Bison-grammaticabestand om een volledige compiler-frontend te bouwen |
| Platformondersteuning | Unix, Linux, macOS standaard; Windows via MSYS2, Cygwin of WinFlexBison |
| Extensie-ambiguïteit | `.l` wordt ook gebruikt voor Lisp-bronbestanden en Unix troff man-pagina-broncode - bestandscontext vereist |
| Uitgebracht | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| Laatste versie | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| Open standaard | Ja · royaltyvrij |
| Specificatie | pubs.opengroup.org |
L conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over L-bestanden.