De bons livres sur la théorie de l'analyseur?

9

Un de mes projets Java est une fourchette d'étuvage , et contrairement à, disons, Antlr ou JavaCC, les analyseurs sont générés au moment de l'exécution. Les grammaires générées sont des grammaires d'expression syntaxique ou PEG (j'entends un autre terme pour eux est "packrat").

Alors que la génération d'exécution ajoute de la complexité (génération de bytecode impliquée), un autre aspect concerne la théorie de l'analyseur lui-même. Comme je n'ai malheureusement aucune formation solide en informatique, je manque de connaissances théoriques pour mapper le code existant sur des concepts existants - dans ce cas, les analyseurs.

Existe-t-il un bon ouvrage de référence sur les parseurs que je peux acheter et lire, ou même des liens sur Internet, qui peuvent m'aider à construire une telle "cartographie", expliquant mes faibles connaissances théoriques?

fge
la source

Réponses:

3

Si vous voulez en savoir plus sur la théorie des analyseurs, je recommande le volume 1 de ce livre classique:

Aho, Alfred V .; Ullman, Jeffrey D., The theory of parsing, translation, and compiling , Prentice-Hall (1972).

Zsbán Ambrus
la source
Il s'agissait d'une encyclopédie sur le sujet au moment de la publication. Mais des travaux de recherche ont été effectués depuis lors.
babou
1

Si vous ne vous occupez pas de la différence de langue, le chapitre 8 de Perl d'ordre supérieur est consacré à l'analyse, et en particulier construit un analyseur de descente récursif à l'aide de combinateurs d'analyseur. Il est accessible (si vous n'avez pas peur de Perl) et disponible à lire gratuitement si vous le souhaitez. Cela m'a aidé à susciter mon intérêt pour les techniques d'analyse il y a plusieurs années.

Hobbs
la source
0

Bien que les techniques d'analyse soient un excellent livre et que j'ai lu plusieurs parties plusieurs fois, il se concentre sur l'analyse LR qui ne sera pas intéressante pour vous. Dans votre cas particulier, vous examinez les PEG qui sont en quelque sorte une analyse descendante récursive descendante avec retour en arrière en fonction de l'ordre des alternatives.

Je voudrais vous suggérer de regarder les combinateurs d'analyseurs, qui utilisent la même stratégie. Vous pouvez par exemple consulter cet article http://research.microsoft.com/pubs/65201/parsec-paper-letter.pdf qui utilise Haskell pour construire des combinateurs d'analyseurs. Vérifiez dans la section try où ils intègrent le retour en arrière (section 3.4).

Dans tous les cas, ce que vous devez apprendre est:

  • analyse de descendance récursive et grammaires LL
  • lookahead fixe vs lookahead infini (fait via backtracking)
  • stratégies de retour en arrière
  • comment gérer les règles récursives de gauche
  • Mémorisation des résultats partiels pour éviter un comportement exponentiel
Wickoo
la source