[Parsec] Analyser de l'UTF-8 ?

J'ai un programme (http://www.cosmogol.fr/shadok.html) qui utilise Parsec pour l'analyse syntaxique. Le langage qu'il analyse est en ASCII pur. Maintenant, des utilisateurs réclament de l'Unicode (encodé en UTF-8). Quelqu'un a déjà essayé ? Il faut pouvoir lire l'UTF-8 depuis Haskell et pouvoir définir une grammaire avec de l'Unicode (voir http://www.w3.org/TR/REC-xml/#NT-Letter pour un joli exemple : c'est la liste des caractères légaux pour un identifiant XML). Quelques références dont je ne sais pas ce qu'elles valent (on note qu'il n'y a rien sur Parsec) : http://www.haskell.org/pipermail/haskell-i18n/2004-February/000127.html http://en.wikibooks.org/wiki/User:Newhoggy/UTF8_for_Haskell http://sophos.berkeley.edu/macfarlane/pandoc/ semble savoir faire tout ça, faut que je lise le source.

On Wed, Jan 10, 2007 at 22:30:28 +0100, Stephane Bortzmeyer wrote:
J'ai un programme (http://www.cosmogol.fr/shadok.html) qui utilise Parsec pour l'analyse syntaxique. Le langage qu'il analyse est en ASCII pur. Maintenant, des utilisateurs réclament de l'Unicode (encodé en UTF-8).
J'ai utilisé ce module que j'ai trouvé dans le code source de darcs http://darcs.net/darcs-unstable/UTF8.hs Pugs se sert aussi de UTF-8: http://svn.openfoundry.org/pugs/src/UTF8.hs Peut-être entre les deux, il y a une solution? -- Eric Kow http://www.loria.fr/~kow PGP Key ID: 08AC04F9 Merci de corriger mon français.

Le Wednesday 10 January 2007 23:41, Eric Y. Kow a écrit :
On Wed, Jan 10, 2007 at 22:30:28 +0100, Stephane Bortzmeyer wrote:
J'ai un programme (http://www.cosmogol.fr/shadok.html) qui utilise Parsec pour l'analyse syntaxique. Le langage qu'il analyse est en ASCII pur. Maintenant, des utilisateurs réclament de l'Unicode (encodé en UTF-8).
J'ai utilisé ce module que j'ai trouvé dans le code source de darcs http://darcs.net/darcs-unstable/UTF8.hs
Donne 404, par contre cette URL fonctionne: http://www.abridgegame.org/repos/darcs-unstable/UTF8.lhs
Pugs se sert aussi de UTF-8: http://svn.openfoundry.org/pugs/src/UTF8.hs
Peut-être entre les deux, il y a une solution?

On Wed, Jan 10, 2007 at 11:41:32PM +0100,
Eric Y. Kow
J'ai utilisé ce module que j'ai trouvé dans le code source de darcs http://darcs.net/darcs-unstable/UTF8.hs
Je n'ai pas réussi à l'utiliser, il part de [Word8] et je me rencontre que je n'ai jamais fait d'E/S binaires en Haskell et qu'un tutoriel ou un exemple ne seraient pas de trop.
Pugs se sert aussi de UTF-8: http://svn.openfoundry.org/pugs/src/UTF8.hs
Idem + il ne compile pas : % ghc -c --make UTF8.hs Chasing modules from: UTF8.hs Could not find module `Data.ByteString.Char8': use -v to see a list of the files searched for (imported from UTF8.hs)

Je n'ai pas réussi à l'utiliser, il part de [Word8] et je me rencontre que je n'ai jamais fait d'E/S binaires en Haskell et qu'un tutoriel ou un exemple ne seraient pas de trop.
Ok. http://www.haskell.org/haskellwiki/UTF-8 #haskell ne sont pas encore pronocés sur le sujet, donc je sais pas du tout si c'est vraiment une bonne façon de faire ou pas.
Pugs se sert aussi de UTF-8: http://svn.openfoundry.org/pugs/src/UTF8.hs
Idem + il ne compile pas :
% ghc -c --make UTF8.hs Chasing modules from: UTF8.hs Could not find module `Data.ByteString.Char8': use -v to see a list of the files searched for (imported from UTF8.hs)
Quelle version de GHC? Si < 6.6 il faut installer le paquet http://www.cse.unsw.edu.au/~dons/fps.html -- Eric Kow http://www.loria.fr/~kow PGP Key ID: 08AC04F9 Merci de corriger mon français.

On Fri, Feb 02, 2007 at 08:43:02PM +0100,
Eric Y. Kow
Excellent, merci, cela va beaucoup m'aider. Je me suis permis de modifier la page pour ajouter un hClose explicite (autrement, le fichier ".rev" est vide - ghc 6.6 sur Debian/Linux).

On Wed, Jan 10, 2007 at 10:30:28PM +0100,
Stephane Bortzmeyer
J'ai un programme (http://www.cosmogol.fr/shadok.html) qui utilise Parsec pour l'analyse syntaxique. Le langage qu'il analyse est en ASCII pur. Maintenant, des utilisateurs réclament de l'Unicode (encodé en UTF-8).
Bon, finalement, Parsec a l'air de très bien se débrouiller, c'étaient les E/S en UTF-8 (pour lesquelles il n'y a rien de standard en Haskell) qui étaient (sont toujours) le plus dur. Donc, avec l'aide de Eric Kow, voici une solution qui marche : 1) Récupérer le code UTF-8 de darcs : http://abridgegame.org/repos/darcs/UTF8.lhs 2) Avoir un module d'E/S UTF-8 (UTF8_IO.hs, attaché, très copié du code d'Eric Kow en http://www.haskell.org/haskellwiki/UTF-8) 3) Le code Parsec s'écrit comme d'habitude. Par exemple, si on met : word = many1 letter "letter" désignera bien toutes les lettres Unicode, pas juste celles de l'ASCII (je n'ai pas trouvé lesquelles il acceptait ; cela ne semble pas documenté et je soupçonne qu'il utilise simplement ce que lui renvoie isAlpha). Si on veut choisir soi-même les caractères Unicode acceptés, pour mettre en oeuvre une liste comme http://www.w3.org/TR/REC-xml/#NT-Letter, satisfy est bien pratique (voir exemple attaché).
participants (4)
-
Eric Y. Kow
-
Olivier Thauvin
-
Stephane Bortzmeyer
-
Stephane Bortzmeyer