Version française
Home     About     Download     Resources     Contact us    
Browse thread
Grammaires et pretty print
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Emmanuel Engel <Emmanuel.Engel@l...>
Subject: Grammaires et pretty print
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