BibTeX++ Suppression de la pile dans les langages à pile Emmanuel DONIN DE ROSIÈRE Encadrant : Ronan KERYELL http://bibtex.enstb.org
Plan Les bibliographies sous LaTeX Présentation de BibTeX++ Objectifs du stage BiSTrO BibTeX++ Résultats Conclusion / Perspectives
Bibliographie Indispensable dans les documents scientifiques car : Permet d'identifier clairement le document Donne de la crédibilité au document Sous LaTeX, un seul logiciel est utilisé : BibTeX
BibTeX (1) Facile à utiliser : Choisir un style de bibliographie (il en existe énormement => 150 dans MikTeX ) Créer la base de références bibliograpiques @BOOK{latex:GooMittSam, Author = {Michel Goossens and Frank Mittelbach and Alexander Samarin}, Publisher = {Addison-Weslay}, Title = {The \LaTeX{} Companion}, Year = {1994} } Rajouter quelques lignes dans le document LaTeX \bibliographystyle{monstyle} \bibliography{mabase}
BibTeX (2) Néanmoins : Pas d'évolution depuis 1990 Le langage de style n'est pas aisé à apprendre (et comprendre) : FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } Pas de gestion des types d'encodage moderne (unicode ...) → Pas de bibliographie en japonais, arabe ...
BibTeX++ Cherche à corriger ces défauts : BibTeX++ est portable (écrit en JAVA) Accepte l'UNICODE (natif en JAVA) Modifiable facilement grâce à un système de plugins Compatible avec BibTeX Les styles sont écrits en JAVA pour qu'ils soient plus simples à écrire et pour avoir plus de fonctionnalités : Internet Locale (gestion des langues) ...
Objectifs du stage Transformer les anciens styles (en bst) en JAVA : Pour garantir la compatibilité avec BibTeX Pour améliorer la lisibilité des styles (pour les programmeurs) Reprendre les différents travaux et ajouter quelques fonctionnalités : Sécurité Procédure d'installation ...
BiSTrO BibTeX Style Translator and Optimizer Transforme les anciens styles BibTeX (en bst) en style BibTeX++ (en JAVA) Permet d'optimiser le code JAVA en sortie => Plus facile de modifier un style Convertit donc un code écrit dans un langage à pile (bst) en code classique (JAVA) => Il faut donc supprimer la pile
Fonctionnement Architecture : AST : Abstract Syntax Tree (arbre syntaxique) Chaque noeud représente un opérateur, les feuilles sont les opérandes
Tree Translator (1) Transforme l'AST bst en AST JAVA 5 étapes : Chercher des informations sur les fonctions (nom, possibilité de retirer la pile, nombre d'arguments, nombre de paramètres de sortie) Retrouver le type des arguments de la fonction (string, entier ou Cell) Trouver le nombre de variables à utiliser et leur type Transformer les fonctions où l'on peut supprimer la pile Transformer les autres fonctions
Tree Translator (2) Transforme la pile en variables Retrouve le typage des éléments : Grâce aux types des éléments retournés par les fonctions internes de BibTeX Grâce aux types des arguments des fonctions internes (pour les arguments)
Tree Translator (3) Néanmoins le code en sortie n'est pas clair : public String format_lastchecked( ) { String s0 , s1; int i0; s0 = lastchecked; i0 = BuiltIn.empty( s0 ); if( i0 > 0 ) { s0 = ""; } else { inbrackets( ); s0 = "cited "; s1 = lastchecked; s0 = s0 + s1; } return( s0 ); } FUNCTION {format.lastchecked} { lastchecked empty$ { "" } { inbrackets "cited " lastchecked * } if$ }
Optimisations Permettent d'obtenir un code plus clair Sont facultatives (option -O) Les plus importantes sont : La propagation de constantes et de copies L'élimination de code mort L'optimization des structures de contrôles (conditions et blocs vides) ...
BibTeX++ Interfaçage avec BiSTrO Gestion de la sécurité (SecurityManager de JAVA) Réécriture des Parsers/Lexers sous SableCC Procédures d'installation (rpm, exe, ant ...) Documentation ...
Résultats Fonctionnel : les bibliographies des rapports ont été faites avec BibTeX++ Code optimisé clair : En moyenne 3.2 sec pour créer un style BibTeX++ (4.4 sec si optimisé) et 0.8 sec pour créer la bibliographie (contre 0.04 sec pour BibTeX) Public void new_sentence( ) { if( output_state != after_block ) { if( output_state != before_all ) { output_state = after_sentence; } } }
Conclusion / Perspectives BibTeX++ : Fonctionnel Compatible avec BibTeX Plus de fonctionnalités Disponible sur picolibre et http://bibtex.enstb.org Néanmoins, reste à : Gérer les plugins Développer des styles BibTeX++ et plugins pour montrer toutes ses capacités