Co to jest format pliku L?
Plik .l to tekstowa specyfikacja analizatora leksykalnego napisana w języku Lex. Definiuje ona, w jaki sposób wejściowy strumień znaków powinien być dzielony na tokeny - co stanowi pierwszy krok w budowie kompilatora, interpretera lub narzędzia do przetwarzania tekstu.
Format został stworzony w Bell Labs w 1975 roku przez Mike'a Leska i Erica Schmidta jako część zestawu narzędzi Unix. Obecnie praktycznie wszystkie pliki .l są przetwarzane przez Flex (Fast Lexical Analyzer), otwartoźródłowego następcę z ery GNU opracowanego przez Verna Paxsona, choć składnia źródłowa pozostaje w dużej mierze taka sama.
Plik .l jest podzielony na trzy sekcje oddzielone liniami ze znacznikiem %%:
- Definicje - nazwane makra wyrażeń regularnych i dyrektywy
%option - Reguły - pary wyrażeń regularnych i kodu akcji w języku C, które są wykonywane po dopasowaniu
- Kod użytkownika - opcjonalne pomocnicze funkcje C dołączane dosłownie do pliku wynikowego
Opcjonalny blok %{ ... %} u góry pliku wstrzykuje deklaracje C bezpośrednio do wygenerowanego skanera. Uruchomienie polecenia flex yourfile.l (lub lex yourfile.l) generuje lex.yy.c, samodzielny plik źródłowy C implementujący skaner jako deterministyczny automat skończony. Wynik ten jest kompilowany kompilatorem C i zazwyczaj łączony z plikiem gramatyki Yacc/Bison w celu zbudowania kompletnego procesora języka.
Należy zauważyć, że rozszerzenie .l jest również używane dla plików źródłowych Lisp oraz źródeł stron podręcznika Unix troff, więc kontekst pliku ma znaczenie przy identyfikacji jego typu.
Bezpieczeństwo
RYZYKO: LOWŹródło Lex .l to zwykły tekst i jest bezpieczne do otwarcia w edytorze. Jedyna uwaga: reguły zawierają kod akcji C, a złośliwy plik .l mógłby zawierać szkodliwy kod C, który zostanie uruchomiony po skompilowaniu. Należy sprawdzać pliki .l z niezaufanych źródeł przed uruchomieniem flex i ich budowaniem.
Szczegóły formatu
w pigułce- Plik źródłowy Lisp (.l) - Niektóre dialekty/implementacje Lisp używają .l dla kodu źródłowego; zwykły tekst, ale inny język niż Lex.
- Strona podręcznika Unix / źródło troff (.l) - Strony podręcznika sekcji-l (lokalne) w formacie nroff/troff; dokumentacja, nie specyfikacja leksera.
- Biblioteka Interleaf / WordPerfect (.l) - Starsze pliki bibliotek lub list w dawnych systemach dokumentów; rzadkie.
Programy otwierające pliki L
Szczegóły techniczne
specyfikacja| Typ formatu | Tekstowa specyfikacja analizatora leksykalnego (kod źródłowy) |
| Kodowanie | Zwykły tekst ASCII / UTF-8; brak nagłówka binarnego lub magicznych bajtów |
| Struktura pliku | Trzy sekcje oddzielone przez `%%`: definicje, reguły i kod C użytkownika |
| Sekcja 1 - Definicje | Nazwane makra regex i dyrektywy `%option` (np. `%option noyywrap`) |
| Sekcja 2 - Reguły | Pary wzorców wyrażeń regularnych i bloków kodu akcji C wykonywanych przy dopasowaniu |
| Sekcja 3 - Kod użytkownika | Opcjonalne funkcje pomocnicze C kopiowane dosłownie do wygenerowanego pliku wynikowego |
| Blok wstrzykiwania kodu C | Prolog `%{ ... %}` u góry wstrzykuje deklaracje C do wygenerowanego skanera |
| Główny wynik | `lex.yy.c` - plik źródłowy C implementujący skaner oparty na DFA |
| Typ MIME | `text/plain` (nieformalny alias: `text/x-lex`) |
| Narzędzia przetwarzające | `lex` (AT&T/POSIX), `flex` (GNU), `win_flex` (Windows przez WinFlexBison) |
| Typowy rozmiar pliku | 1 KB - 100 KB |
| Algorytm skanera | Kompiluje reguły regex do deterministycznego automatu skończonego (DFA) w czasie budowy |
| Typowe połączenie | Łączony z plikiem gramatyki `.y` Yacc lub Bison w celu zbudowania kompletnego front-endu kompilatora |
| Obsługa platform | Unix, Linux, macOS natywnie; Windows przez MSYS2, Cygwin lub WinFlexBison |
| Niejednoznaczność rozszerzenia | `.l` jest również używane dla plików źródłowych Lisp i źródeł stron man Unix troff - wymagany kontekst pliku |
| Wydano | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| Najnowsza wersja | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | pubs.opengroup.org |
Konwersje L
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki L.