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?
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.
la source
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:
la source