| Anonymous | Login | Signup for a new account | 2013-06-20 13:45 CEST | ![]() |
| Main | My View | View Issues | Change Log | Roadmap |
| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | ||||||
| 0003238 | OCaml | OCaml general | public | 2004-10-26 16:41 | 2004-11-02 11:48 | ||||||
| Reporter | administrator | ||||||||||
| Assigned To | |||||||||||
| Priority | normal | Severity | feature | Reproducibility | always | ||||||
| Status | acknowledged | Resolution | open | ||||||||
| Platform | OS | OS Version | |||||||||
| Product Version | |||||||||||
| Target Version | Fixed in Version | ||||||||||
| Summary | 0003238: documentation Lexing.position | ||||||||||
| Description | Full_Name: Jean-Christophe Filliâtre Version: ocaml 3.08.1 OS: Linux Submission from: pc8-142.lri.fr (129.175.8.142) Bonjour, Je me permets de vous faire remonter une (petite) critique, issue de notre utilisation d'ocaml avec les étudiants de maîtrise d'Orsay. Comme chaque année ils écrivent un compilateur en ocaml, et comme chaque année nous exigeons d'eux que leur compilateur affiche des messages d'erreurs bien localisés, i.e. donnant la ligne et la colonne conernées. Pendant des années, cette petite exigeance a été une vraie souffrance pour les étudiants (qui torturaient leur lexeur, écrivaient une recherche de la ligne a posteriori, etc.) Heureusement, depuis ocaml 3.07 il y a le type Lexing.position. Merci pour cela. Malheureusement, le comportement d'ocamllex vis-à-vis de ce type est peu spécifié. D'une part le commentaire expliquant que seul le champ pos_cnum est mis à jour n'est pas très bien placé : en effet si on lit seulement la documentation de lexeme_start_p et du type position alors on loupe cette info essentielle et pourtant on a bien lu tout ce dont on avait besoin (il n'est pas nécessaire d'aller comprendre ce qu'est le type lexbuf a priori). Mais surtout il n'est expliqué nulle part (je ferai mon mea culpa si j'ai tord) que la machinerie d'ocamllex copie la valeur de tous les champs autres que pos_cnum (probablement par une construction with, comme on l'imagine facilement). Du coup il n'est pas évident qu'il suffit de mettre à jour les champs pos_lnum et pos_bol à chaque retour-chariot seulement. Bien entendu, il suffit de lire les sources d'ocaml pour voir qu'une petite fonction du genre ====================================================================== let newline lexbuf = let pos = lexbuf.lex_curr_p in lexbuf.lex_curr_p <- { pos with pos_lnum = pos.pos_lnum + 1; pos_bol = pos.pos_cnum } ====================================================================== appelée à chaque retour-chariot suffit (ce qui est un net progrès par rapports aux anciennes manières de procéder), mais nos étudiants n'ont pas le réflexe d'aller lire les sources d'ocaml :-) Bref, ne prenez pas mal cette petite critique, mais un peu plus de documentation à cet endroit-là aiderait (une petite illustration dans la doc du module Lexing, avec la fonction ci-dessus donnée par exemple, serait parfait). Une autre critique que font souvent nos étudiants : certains messages d'erreur d'ocamlyacc sont affichés dans un format incompatible avec la fonction next-error d'Emacs. C'est vraiment pénible... Cordialement, -- Jean-Christophe | ||||||||||
| Tags | No tags attached. | ||||||||||
| Attached Files | |||||||||||
Notes |
|
|
(0000236) administrator (administrator) 2004-11-02 11:48 |
messages d'erreur ocamlyacc: fait |
Issue History |
|||
| Date Modified | Username | Field | Change |
| 2005-11-18 10:13 | administrator | New Issue | |
| Copyright © 2000 - 2011 MantisBT Group |