AST, parser et desucrage

29 views
Skip to first unread message

Alexandre Bique

unread,
May 12, 2008, 5:14:10 PM5/12/08
to dcom...@googlegroups.com
Plop,

J'ai avance un ptit peu le parsing des expressions dernierement, et
j'ai machinalement ajoute pleins de classes puis j'ai ete voir sur
tiger.

On diverge en plusieurs points :
- sur tiger il n'y a qu'un noeud Exp
- nous avons une classe fille pour chaque type d'expression (+, -, *,
/, <<<, ...)

- notre ast est fidele au fichier (pas de desucrage)
- l'ast de tiger n'est pas fidele au fichier, il desucre a+= b en a =
a + (b) (ce qui ne permet pas de restaurer le fichier lors d'un pretty
print).

Quel sont les bons choix ?

Avoir plusieurs classes fille ?
+ cela supprime les if ou switch. (je vote ici)
- cela alourdis l'ast

Etre fidele au fichier ?
+ cela permet de pretty printer
- Il faut desucrer apres. Meme ci ce n'est pas long : acces disque +
parse >> desucrage.
- Cela alourdis l'ast. (je vote ici)

Qu'en pensez-vous ?

--
Alexandre Bique (bique.a...@gmail.com)
Epita 2009 - GISTR - Yaka
Port. +336 19 42 85 26

Yann Grandmaitre

unread,
May 12, 2008, 7:02:40 PM5/12/08
to dcom...@googlegroups.com
Le 12/05/08, Alexandre Bique<bique.a...@gmail.com> a écrit :

> On diverge en plusieurs points :
> - sur tiger il n'y a qu'un noeud Exp
Exp est une classe abstraite y a plusieurs classes qui en héritent.

> - nous avons une classe fille pour chaque type d'expression (+, -, *,
> /, <<<, ...)
>
> - notre ast est fidele au fichier (pas de desucrage)
> - l'ast de tiger n'est pas fidele au fichier, il desucre a+= b en a =
> a + (b) (ce qui ne permet pas de restaurer le fichier lors d'un pretty
> print).
>

Hum en Tiger a+= b ça n'existe pas ...

> Quel sont les bons choix ?
>
> Avoir plusieurs classes fille ?
> + cela supprime les if ou switch. (je vote ici)
> - cela alourdis l'ast
>
> Etre fidele au fichier ?
> + cela permet de pretty printer
> - Il faut desucrer apres. Meme ci ce n'est pas long : acces disque +
> parse >> desucrage.
> - Cela alourdis l'ast. (je vote ici)
>

Je comprend pas trop tes 3 points la mais en tout cas je vois pas
l'intérêt de pretty printer exactement comme le fichier en entré.
Pretty printer en ayant désucré une partie du code suffit d'autant
plus que le pretty printer ne servira que pour vous (comprendre les
développeurs du compilateur) ou alors y a une utilité que je ne vois
pas.

> Qu'en pensez-vous ?
>

Sinon juste pour savoir tu regarde quelles source de Tiger?


--
Grandmaitre Yann
Ing2 EPITA 2009 -GISTR-
Yaka 2009

Alexandre Bique

unread,
May 13, 2008, 4:33:57 AM5/13/08
to dcom...@googlegroups.com
2008/5/13 Yann Grandmaitre <yanngra...@gmail.com>:

> Le 12/05/08, Alexandre Bique<bique.a...@gmail.com> a écrit :
>
> > On diverge en plusieurs points :
> > - sur tiger il n'y a qu'un noeud Exp
> Exp est une classe abstraite y a plusieurs classes qui en héritent.
Dans ce cas je n'ai rien dit, mais +, -, * et / ne font pas partit de
la meme classe ?

> > - nous avons une classe fille pour chaque type d'expression (+, -, *,
> > /, <<<, ...)
> >
> > - notre ast est fidele au fichier (pas de desucrage)
> > - l'ast de tiger n'est pas fidele au fichier, il desucre a+= b en a =
> > a + (b) (ce qui ne permet pas de restaurer le fichier lors d'un pretty
> > print).

> Hum en Tiger a+= b ça n'existe pas ...

Erf j'ai dit une betise, mais j'en avais parle avec Nico Tek, j'ai du
mal comprendre alors.

> > Quel sont les bons choix ?
> >
> > Avoir plusieurs classes fille ?
> > + cela supprime les if ou switch. (je vote ici)
> > - cela alourdis l'ast
> >
> > Etre fidele au fichier ?
> > + cela permet de pretty printer
> > - Il faut desucrer apres. Meme ci ce n'est pas long : acces disque +
> > parse >> desucrage.
> > - Cela alourdis l'ast. (je vote ici)
> >
> Je comprend pas trop tes 3 points la mais en tout cas je vois pas
> l'intérêt de pretty printer exactement comme le fichier en entré.
> Pretty printer en ayant désucré une partie du code suffit d'autant
> plus que le pretty printer ne servira que pour vous (comprendre les
> développeurs du compilateur) ou alors y a une utilité que je ne vois
> pas.

L'interet d'avoir un ast etant fidele au fichier est qu'il est
reutilisable pour d'autres usage. Je dis ca betement, mais l'ast
correspond a la syntaxe et le desucrage a la semantique. Mais si je
pose la question c'est que je me dis bien que c'est peut-etre une
erreure de ne pas desucrer des le debut.

> > Qu'en pensez-vous ?
> >
>
> Sinon juste pour savoir tu regarde quelles source de Tiger?

J'avais regarde avec Nico Tek.

Arkanosis

unread,
May 13, 2008, 8:24:52 AM5/13/08
to dcom...@googlegroups.com
Le 13 mai 2008 10:33, Alexandre Bique <bique.a...@gmail.com> a écrit :
> 2008/5/13 Yann Grandmaitre <yanngra...@gmail.com>:
> > Le 12/05/08, Alexandre Bique<bique.a...@gmail.com> a écrit :
> > > Avoir plusieurs classes fille ?
> > > + cela supprime les if ou switch. (je vote ici)
> > > - cela alourdis l'ast

Moins de boulot au départ, mais est-ce vraiment si important ?

> > > Etre fidele au fichier ?
> > > + cela permet de pretty printer
> > > - Il faut desucrer apres. Meme ci ce n'est pas long : acces disque +
> > > parse >> desucrage.

Je pense même que c'est négligeable (enfin c'est le sens de ">>" :p)

> > > - cela alourdis l'ast

Voire. On a peut-être moyen de factoriser le désucrage après coup,
alors que ce serait plus difficile si on le faisant en phase de
parsing.

> > Je comprend pas trop tes 3 points la mais en tout cas je vois pas
> > l'intérêt de pretty printer exactement comme le fichier en entré.
> > Pretty printer en ayant désucré une partie du code suffit d'autant
> > plus que le pretty printer ne servira que pour vous (comprendre les
> > développeurs du compilateur) ou alors y a une utilité que je ne vois
> > pas.

L'AST peut servir à plein d'autres choses qu'à la compilation, comme
un code beautifier (pour remplacer les espaces par des tabs :p), un
générateur de documentation, d'uml, un code coverage, une
autocompletion ou même juste pour avoir un debugger correct.
Sachant que de base en D, l'AST devrait même contenir les commentaires
de documentation, je ne pense pas que supprimer directement certaines
constructions du langage soit une bonne chose.

> L'interet d'avoir un ast etant fidele au fichier est qu'il est
> reutilisable pour d'autres usage. Je dis ca betement, mais l'ast
> correspond a la syntaxe et le desucrage a la semantique. Mais si je
> pose la question c'est que je me dis bien que c'est peut-etre une
> erreure de ne pas desucrer des le debut.

Non je ne pense pas. On se laisse plus de possibilités pour la suite.

--
Arkanosis

Reply all
Reply to author
Forward
0 new messages