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?
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.
fonte
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 é:
fonte