Bons livros sobre a teoria do analisador?


9

Um dos meus projetos Java é uma bifurcação de analisadores parboilizados e, diferentemente do Antlr ou JavaCC, os geradores são gerados em tempo de execução. Gramáticas geradas são Gramáticas de Expressão de Análise ou PEGs (ouço outro termo para elas é "packrat").

Enquanto a geração de tempo de execução adiciona complexidade (geração de bytecode envolvida), outro aspecto está relacionado à própria teoria do analisador. Como, infelizmente, não tenho formação sólida em ciência da computação, não tenho conhecimento teórico para mapear o código existente para conceitos existentes - neste caso, analisadores.

Existe um bom livro de referência sobre analisadores que eu possa comprar e ler, ou até mesmo links na Internet, que podem me ajudar a criar esse "mapeamento", responsável pelo meu pobre conhecimento teórico?

Respostas:



3

Se você quiser aprender sobre a teoria dos analisadores, recomendo o volume 1 deste livro clássico:

Aho, Alfred V .; Ullman, Jeffrey D., A teoria da análise, tradução e compilação , Prentice-Hall (1972).


Esta era uma enciclopédia sobre o tema no momento da publicação. Mas tem havido trabalho de pesquisa desde então.
babou

1

Se você não se importa com a diferença de idioma, o Capítulo 8 do Higl de ordem superior trata de analisar e, em particular, cria um analisador de descida recursiva usando combinadores de analisador. É acessível (se você não tem medo do Perl) e está disponível para leitura gratuita, se quiser. Isso ajudou a despertar meu interesse em analisar técnicas há vários anos.


0

Embora o Parsing Techniques seja um ótimo livro e eu li algumas partes várias vezes, ele tem seu foco na análise de LR, o que não será interessante para você. No seu caso particular, você está vendo PEGs, que são uma espécie de descida recursiva de cima para baixo, analisando com retorno com base na ordem das alternativas.

Gostaria de sugerir que você olhe para os combinadores do analisador, que usam a mesma estratégia. Você pode, por exemplo, verificar este documento http://research.microsoft.com/pubs/65201/parsec-paper-letter.pdf, que usa o Haskell para criar combinadores de analisadores. Verifique a seção try onde eles incorporam o retorno (Seção 3.4).

De qualquer forma, o que você precisa aprender é:

  • análise de descida recursiva e gramáticas LL
  • lookahead fixo vs. infinito (feito via backtracking)
  • estratégias de retorno
  • como lidar com regras recursivas à esquerda
  • Memorização dos resultados parciais para evitar comportamento exponencial
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.