Che cos'è il formato di file L?
Un file .l è una specifica di un analizzatore lessicale in testo semplice scritta nel linguaggio Lex. Definisce come un flusso di caratteri in input debba essere suddiviso in token - il primo passo nella costruzione di un compilatore, un interprete o uno strumento di elaborazione testi.
Il formato è stato creato presso i Bell Labs nel 1975 da Mike Lesk ed Eric Schmidt come parte della toolchain Unix. Oggi, praticamente tutti i file .l vengono elaborati da Flex (Fast Lexical Analyzer), il successore open-source dell'era GNU sviluppato da Vern Paxson, sebbene la sintassi sorgente rimanga sostanzialmente la stessa.
Un file .l è diviso in tre sezioni separate da righe con il marcatore %%:
- Definizioni - macro regex con nome e direttive
%option - Regole - coppie di espressioni regolari e codice d'azione C che vengono eseguite in caso di corrispondenza
- Codice utente - funzioni C ausiliarie opzionali aggiunte testualmente all'output
Un blocco opzionale %{ ... %} vicino all'inizio inietta dichiarazioni C direttamente nello scanner generato. Eseguendo flex yourfile.l (o lex yourfile.l) si produce lex.yy.c, un file sorgente C autonomo che implementa lo scanner come un automa a stati finiti deterministico. Tale output viene compilato con un compilatore C e tipicamente collegato a un file di grammatica Yacc/Bison per costruire un processore linguistico completo.
Si noti che .l è utilizzato anche per i file sorgente Lisp e i sorgenti delle pagine di manuale troff di Unix, quindi il contesto del file è fondamentale per identificarne il tipo.
Sicurezza e incolumità
RISCHIO: LOWUn sorgente Lex .l è testo semplice e sicuro da aprire in un editor. L'unica cautela: le regole contengono codice d'azione C, e un file .l malevolo potrebbe incorporare codice C dannoso che viene eseguito una volta compilato. Esamina i file .l da fonti non attendibili prima di eseguire flex e compilarli.
Dettagli del formato
in sintesi- File sorgente Lisp (.l) - Alcuni dialetti/implementazioni Lisp usano .l per il codice sorgente; testo semplice, ma un linguaggio diverso da Lex.
- Sorgente pagina man Unix / troff (.l) - Pagine di manuale della Sezione-l (locale) in sorgente nroff/troff; documentazione, non una specifica di lexer.
- Libreria Interleaf / WordPerfect (.l) - File di libreria o elenco in vecchi sistemi di documenti; raro.
Programmi che aprono file L
Dettagli tecnici
specifiche approfondite| Tipo di formato | Specifica di analizzatore lessicale in testo semplice (codice sorgente) |
| Codifica | Testo semplice ASCII / UTF-8; nessun header binario o magic bytes |
| Struttura del file | Tre sezioni separate da `%%`: definizioni, regole e codice C utente |
| Sezione 1 - Definizioni | Macro regex con nome e direttive `%option` (es. `%option noyywrap`) |
| Sezione 2 - Regole | Coppie di pattern di espressioni regolari e blocchi di codice d'azione C eseguiti al match |
| Sezione 3 - Codice utente | Funzioni ausiliarie C opzionali copiate testualmente nel file di output generato |
| Blocco di iniezione codice C | Il prologo `%{ ... %}` vicino all'inizio inietta dichiarazioni C nello scanner generato |
| Output primario | `lex.yy.c` - un file sorgente C che implementa uno scanner basato su DFA |
| Tipo MIME | `text/plain` (alias informale: `text/x-lex`) |
| Strumenti di elaborazione | `lex` (AT&T/POSIX), `flex` (GNU), `win_flex` (Windows via WinFlexBison) |
| Dimensione tipica del file | 1 KB - 100 KB |
| Algoritmo dello scanner | Compila le regole regex in un automa a stati finiti deterministico (DFA) al momento della build |
| Accoppiamento comune | Combinato con un file di grammatica Yacc o Bison `.y` per costruire un front-end completo del compilatore |
| Supporto piattaforma | Unix, Linux, macOS nativamente; Windows tramite MSYS2, Cygwin o WinFlexBison |
| Ambiguità dell'estensione | `.l` è usato anche per i file sorgente Lisp e i sorgenti delle pagine man troff di Unix - è richiesto il contesto del file |
| Rilasciato | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| Ultima versione | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| Standard aperto | Sì · royalty-free |
| Specifica | pubs.opengroup.org |
Conversioni L
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file L.