O que é o formato de ficheiro L?
Um arquivo .l é uma especificação de analisador léxico em texto simples escrita na linguagem Lex. Ele define como um fluxo de caracteres de entrada deve ser dividido em tokens - o primeiro passo na construção de um compilador, intérprete ou ferramenta de processamento de texto.
O formato foi criado no Bell Labs em 1975 por Mike Lesk e Eric Schmidt como parte do conjunto de ferramentas Unix. Hoje, virtualmente todos os arquivos .l são processados pelo Flex (Fast Lexical Analyzer), o sucessor de código aberto da era GNU desenvolvido por Vern Paxson, embora a sintaxe de origem permaneça amplamente a mesma.
Um arquivo .l é dividido em três seções separadas por linhas de marcação %%:
- Definições - macros regex nomeadas e diretivas
%option - Regras - pares de expressões regulares e código de ação em C que são executados em caso de correspondência
- Código do usuário - funções auxiliares em C opcionais anexadas literalmente à saída
Um bloco opcional %{ ... %} próximo ao topo injeta declarações em C diretamente no scanner gerado. Executar flex seuarquivo.l (ou lex seuarquivo.l) produz lex.yy.c, um arquivo de código-fonte C independente que implementa o scanner como um autômato finito determinístico. Essa saída é compilada com um compilador C e normalmente vinculada a um arquivo de gramática Yacc/Bison para construir um processador de linguagem completo.
Note que .l também é usado para arquivos de código-fonte Lisp e fontes de páginas de manual troff do Unix, portanto, o contexto do arquivo é importante ao identificar o tipo.
Segurança e proteção
RISCO: LOWUm código-fonte Lex .l é texto simples e seguro para abrir em um editor. O único cuidado: as regras contêm código de ação em C, e um .l malicioso pode incorporar código C prejudicial que é executado após a compilação. Revise arquivos .l de fontes não confiáveis antes de executar o flex e construí-los.
Detalhes do formato
em resumo- Arquivo de código-fonte Lisp (.l) - Alguns dialetos/implementações de Lisp usam .l para código-fonte; texto simples, mas uma linguagem diferente do Lex.
- Página de manual Unix / fonte troff (.l) - Páginas de manual da Seção-l (local) em fonte nroff/troff; documentação, não uma especificação de lexer.
- Biblioteca Interleaf / WordPerfect (.l) - Arquivos de biblioteca ou lista legados em sistemas de documentos antigos; raro.
Programas que abrem arquivos L
Detalhes técnicos
especificação profunda| Tipo de formato | Especificação de analisador léxico em texto simples (código-fonte) |
| Codificação | Texto simples ASCII / UTF-8; sem cabeçalho binário ou magic bytes |
| Estrutura do arquivo | Três seções separadas por `%%`: definições, regras e código C do usuário |
| Seção 1 - Definições | Macros regex nomeadas e diretivas `%option` (ex: `%option noyywrap`) |
| Seção 2 - Regras | Pares de padrões de expressão regular e blocos de código de ação em C executados na correspondência |
| Seção 3 - Código do usuário | Funções auxiliares em C opcionais copiadas literalmente para o arquivo de saída gerado |
| Bloco de injeção de código C | Prólogo `%{ ... %}` próximo ao topo injeta declarações em C no scanner gerado |
| Saída primária | `lex.yy.c` - um arquivo de código-fonte C que implementa um scanner baseado em DFA |
| Tipo MIME | `text/plain` (alias informal: `text/x-lex`) |
| Ferramentas de processamento | `lex` (AT&T/POSIX), `flex` (GNU), `win_flex` (Windows via WinFlexBison) |
| Tamanho de arquivo típico | 1 KB - 100 KB |
| Algoritmo do scanner | Compila regras regex para um autômato finito determinístico (DFA) no momento da construção |
| Emparelhamento comum | Combinado com um arquivo de gramática Yacc ou Bison `.y` para construir um front-end de compilador completo |
| Suporte de plataforma | Unix, Linux, macOS nativamente; Windows via MSYS2, Cygwin ou WinFlexBison |
| Ambiguidade de extensão | `.l` também é usado para arquivos de código-fonte Lisp e fonte de página de manual troff do Unix - contexto de arquivo necessário |
| Lançado | Lex, 1975 (Unix); standardized in POSIX (lex utility) |
| Versão mais recente | Flex 2.6.4 (2017) is the de-facto current implementation reading .l files |
| Padrão aberto | Sim · livre de royalties |
| Especificação | pubs.opengroup.org |
Conversões de L
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos L.