caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Emmanuel Engel <Emmanuel.Engel@lri.fr>
To: caml-list@inria.fr
Subject: Grammaires et pretty print
Date: Tue, 02 Dec 1997 13:45:37 +0100	[thread overview]
Message-ID: <348402F1.D25@lri.fr> (raw)

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





             reply	other threads:[~1997-12-02 16:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-12-02 12:45 Emmanuel Engel [this message]
1997-12-02 20:58 ` Daniel de Rauglaudre
1997-12-03 17:38   ` Pierre Weis
1997-12-07 15:30 ` Grammars and " Daniel de Rauglaudre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=348402F1.D25@lri.fr \
    --to=emmanuel.engel@lri.fr \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).