ScholarGate
Assistente

Análise Léxica e Sintática

A análise léxica e sintática formam o front-end de um compilador, dividindo o texto-fonte em tokens e reconhecendo sua estrutura gramatical como uma árvore de análise ou sintaxe.

Encontrar tema com PaperMindEm breveFind papers & topics
Tools & resources
Baixar slides
Learn & explore
VídeoEm breve

Definition

A análise léxica é a fase que agrupa caracteres de entrada em tokens, e a análise sintática (parsing) é a fase que determina se e como esses tokens formam um programa válido de acordo com uma gramática, produzindo uma árvore de sintaxe.

Scope

Este tópico abrange a análise léxica, que converte fluxos de caracteres em tokens usando linguagens regulares e autômatos finitos, e a análise sintática (parsing), que reconhece a estrutura de frase de um programa em relação a uma gramática livre de contexto. Inclui parsing top-down (LL) e bottom-up (LR), geradores de parser, ambiguidade e recuperação de erros, e a construção de árvores de sintaxe abstrata.

Core questions

  • Como as linguagens regulares e livres de contexto são usadas para descrever a estrutura do programa?
  • Quais são as vantagens e desvantagens entre o parsing LL e LR?
  • Como a ambiguidade e os erros de análise são detectados e tratados?
  • Como uma árvore de sintaxe abstrata é construída a partir de um fluxo de tokens?

Key theories

Parsing LR
Knuth introduziu o parsing LR, uma técnica bottom-up que analisa deterministicamente a ampla classe de gramáticas LR em tempo linear, formando a base de muitos geradores de parser.
Parsing geral livre de contexto
O algoritmo de Earley analisa gramáticas arbitrárias livres de contexto, incluindo as ambíguas, fornecendo um método geral quando parsers determinísticos restritos são insuficientes.
Fundamentos regulares e livres de contexto do front-end
O Dragon Book sistematiza o uso de expressões regulares e autômatos finitos para varredura e gramáticas livres de contexto para análise, incluindo os algoritmos padrão de construção LL e LR.

Clinical relevance

A análise léxica e sintática são fundamentais não apenas para compiladores, mas também para interpretadores, linters, formatadores, IDEs e processadores de formato de dados. Um parsing robusto com boa recuperação de erros é essencial para a experiência do desenvolvedor de qualquer ferramenta de linguagem.

History

A hierarquia de linguagens formais de Chomsky no final da década de 1950 forneceu a teoria das linguagens regulares e livres de contexto. Knuth formalizou o parsing LR em 1965, e Earley apresentou um algoritmo geral livre de contexto em 1970. Geradores de parser como o yacc tornaram o parsing LR prático, enquanto trabalhos posteriores exploraram gramáticas de expressão de parsing e parsers baseados em combinadores.

Debates

Parsers gerados versus escritos à mão
Profissionais debatem o uso de geradores de parser a partir de gramáticas formais, que são concisos e verificáveis, em oposição a parsers de descida recursiva escritos à mão, que frequentemente fornecem melhores mensagens de erro e controle, ao custo de mais código.

Key figures

  • Donald Knuth
  • Jay Earley
  • Alfred Aho
  • Noam Chomsky

Related topics

Seminal works

  • knuth1965
  • earley1970
  • aho2006

Frequently asked questions

Qual é a diferença entre um lexer e um parser?
Um lexer agrupa caracteres brutos em tokens, como identificadores e operadores, enquanto um parser organiza esses tokens em uma árvore de sintaxe hierárquica de acordo com a gramática da linguagem.
Qual é a diferença entre o parsing LL e LR?
Parsers LL funcionam de cima para baixo, prevendo produções a partir do prefixo de entrada, enquanto parsers LR funcionam de baixo para cima, reduzindo substrings reconhecidas; LR lida com uma classe estritamente maior de gramáticas, mas é mais complexo de construir.

Methods for this concept

Related concepts