From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: weis Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id RAA22272 for caml-redistribution; Tue, 2 Dec 1997 17:39:42 +0100 (MET) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id NAA13988 for ; Tue, 2 Dec 1997 13:45:43 +0100 (MET) Received: from lri.lri.fr (root@lri.lri.fr [129.175.15.1]) by nez-perce.inria.fr (8.8.7/8.8.5) with ESMTP id NAA16000 for ; Tue, 2 Dec 1997 13:45:41 +0100 (MET) Received: from sun-demons.lri.fr (sun-demons.lri.fr [129.175.8.90]) by lri.lri.fr (8.8.5/jtpda-5.2) with ESMTP id NAA15286 for ; Tue, 2 Dec 1997 13:45:38 +0100 (MET) Received: from sun-demons by sun-demons.lri.fr (8.8.4/local) with SMTP id NAA25129 for ; Tue, 2 Dec 1997 13:45:37 +0100 (MET) Message-ID: <348402F1.D25@lri.fr> Date: Tue, 02 Dec 1997 13:45:37 +0100 From: Emmanuel Engel X-Mailer: Mozilla 3.01Gold (X11; I; SunOS 5.5 sun4u) MIME-Version: 1.0 To: caml-list@inria.fr Subject: Grammaires et pretty print Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: weis J'ai une question sur les grammaires et le pretty-print. Chaque fois que je doit debugger un programme, je suis toujours plus ou moin amene a definir des pretty printer pour avoir une chance de faire afficher au debugger ou aux "print" que j'insere partout dans le code les informations (de facon lisible) qui me sont utiles pour suivre le deroulement de l'execution du programme. Par ailleurs bien souvent j'ai ecrit un parser (avec camlyacc) pour ces structures de donnees. Il me semble qu'un outil qui sait engendre des parser devrait aussi savoir faire du pretty-print. Je m'explique: Un outil comme (caml)yacc (camlp4) prend en entree une grammaire, des (meta) regles pour desambiguer cette grammaire et rend un parser qui reconnait les expressions du langage engendre par la grammaire. Pourquoi de tels outils ne rendent pas aussi un pretty-printer pour les expressions engendrees par la grammaire ? Cela ne me semble plus facile que le parsing: Soit la grammaire non ambigue E -> E_1 + E | E_1 E_1 -> E_2 * E_1 | E_2 E_2 -> cst | (E) Engendrer le pretty-printer de maniere systematique avec un parenthesage minimal n'est pas difficile, il suffit d'ecrire une serie de fonction mutuellement recursives qui suivent exactement la structure de la grammaire: let rec print_E = function x1 + x2 -> print_E_1 x1; print_token +; print_E x2 |x -> print_E_1 x and print_E_1 = function x1 * x2 -> print_E_2 x1; print_token *; print_E_1 x2 |x -> print_E_2 and print_E_2 = function cst -> print cst |x -> print_token (; print x; print_token ) De tels outils n'existent pas. Il doit y avoir une bonne raison, quel est le point que j'ai loupe ?? -- - Emmanuel Engel