
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é).