TODO 8.36 KB
Newer Older
POTTIER Francois's avatar
POTTIER Francois committed
1 2
* ErrorReporting: experiment with merging several symbols
  so as to reduce the noise (e.g. operators, expressions,
POTTIER Francois's avatar
POTTIER Francois committed
3 4 5 6 7 8
  etc.). Or just print the same way, but don't quotient
  internally, as the locations are not the same.
  Think about HTML output with mouse-over.
  Also, sort the explanations by a certain measure of
  complexity. E.g., those that go back to a "higher" non-terminal
  symbol should be preferred.
POTTIER Francois's avatar
POTTIER Francois committed
9

POTTIER Francois's avatar
POTTIER Francois committed
10 11
* Add left-recursive lists to the standard library.

POTTIER Francois's avatar
POTTIER Francois committed
12 13 14 15
* Define [print_result].
  Define a printer that shows the states in the stack.
  Try computing a set of expected symbols in the current state.

POTTIER Francois's avatar
POTTIER Francois committed
16
* Generate default printers for terminal and nonterminal.
POTTIER Francois's avatar
POTTIER Francois committed
17 18
  Using modular implicits, generate terminal2token and
  nonterminal2value.
POTTIER Francois's avatar
POTTIER Francois committed
19

20
* IncrementalEngine: document [lr1state], [element], [view].
POTTIER Francois's avatar
POTTIER Francois committed
21
  Document the Inspection interface.
22

POTTIER Francois's avatar
POTTIER Francois committed
23 24 25 26
* document that --depend may produce inaccurate dependencies
  for parser.cmi and that it is recommended to use --raw-depend
  --ocamldep "ocamldep -modules" and work from there (which is
  what ocamlbuild does).
27

POTTIER Francois's avatar
POTTIER Francois committed
28
* Confirm and understand why the code back-end slows down by 50%
POTTIER Francois's avatar
POTTIER Francois committed
29 30
  between 4.01.0 and 4.02.1. Use the tag last309 for this purpose,
  or the master branch.
POTTIER Francois's avatar
POTTIER Francois committed
31

32 33 34
* Is it possible to update calc-two and calc-param to use ocamlbuild?
    (they need --external-tokens and --only-tokens)
  Then, one could remove Makefile.shared and ocamldep.wrapper.
35

POTTIER Francois's avatar
POTTIER Francois committed
36
* Suite des patchs de Frédéric Bour.
POTTIER Francois's avatar
POTTIER Francois committed
37
    API d'inspection complète.
POTTIER Francois's avatar
POTTIER Francois committed
38
      Expose FIRST?
POTTIER Francois's avatar
POTTIER Francois committed
39 40
    Librairie(s) pour la gestion des erreurs.
    Librairie pour la complétion du parsing.
POTTIER Francois's avatar
POTTIER Francois committed
41
      Need a way of feeding the parser a nonterminal symbol.
POTTIER Francois's avatar
POTTIER Francois committed
42
    Peut-on faire un noyau de Merlin indépendant de la grammaire?
43 44 45

* Meilleurs messages d'erreur de syntaxe.
    Revenir en arrière après une erreur, car l'erreur
POTTIER Francois's avatar
POTTIER Francois committed
46 47 48
    n'est détectée qu'après quelques réductions. Une fois que l'on est
    revenu, on peut examiner les items de l'état courant et donner des
    positions de début d'item qui devraient être intéressantes.    
POTTIER Francois's avatar
POTTIER Francois committed
49 50
  Possibilité de coloriser ce qu'on a lu en indiquant ce qu'on a compris
  (sortie HTML).
POTTIER Francois's avatar
POTTIER Francois committed
51

52 53
* Could we avoid listing the contents of MenhirLib in 4 different files?

POTTIER Francois's avatar
POTTIER Francois committed
54 55 56
* bundle the Coq library with menhir, and add demos/calc-coq
  to show how it is used

POTTIER Francois's avatar
POTTIER Francois committed
57 58 59
* Clarifier si ocamlbuild doit recevoir -use-ocamlfind, -no-ocamlfind,
  ou rien; tester en particulier sous Windows?

fpottier's avatar
fpottier committed
60
* ajouter une possibilité de désactiver certains warnings (utile pour
fpottier's avatar
fpottier committed
61 62 63 64 65 66
  le cours de compilation où on démarre avec une grammaire à trous),
  par exemple les non-terminaux inaccessibles

* add a way of turning off the "unused token" warning for a specific token
  (or for all of them) This is legitimate because the lexer might be designed
  to produce certain tokens that the parser does not use at all.
fpottier's avatar
fpottier committed
67

fpottier's avatar
fpottier committed
68
* move to a new license (GPL V2?), as per Hongbo Zhang's request.
POTTIER Francois's avatar
POTTIER Francois committed
69
* Les fichiers dans demos/ ne devraient pas être sous QPL mais libres...
fpottier's avatar
fpottier committed
70

fpottier's avatar
fpottier committed
71 72
* _stage2/menhir.native --interpret fancy-parser.mly
  crashes with Stack_overflow when the input is just "grammar:\n"
POTTIER Francois's avatar
POTTIER Francois committed
73
  ... it seems to loop now ...
74 75 76 77 78 79 80 81 82 83

* BUG: la directive $type<...> nt donne lieu à un message d'erreur bizarre
  si le non-terminal nt n'existe pas. (Jacques-Henri.)

* On pourrait rendre moins restrictif le critère qui garantit la terminaison
  de l'expansion des non-terminaux paramétrés. Il suffirait de vérifier que
  les paramètres effectifs sont toujours des atomes (symboles terminaux ou
  non-terminaux), non? (Jacques-Henri.)

* les positions fournies par menhir ne sont pas les mêmes fournies par
fpottier's avatar
fpottier committed
84 85
  ocamlyacc (voir messages de Tiphaine Turpin à partir du 30/08/2011).
  Est-ce un problème? Peut-on documenter quelles sont les
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
  positions fournies par Menhir? En particulier, pour une production
  vide, Menhir utilise _menhir_env.lexer.lex_start_p, c'est-à-dire le
  début du dernier token lu par le lexer; en principe c'est le token
  de lookahead donc ça va, mais ça pourrait donner un résultat bizarre
  si on réduit par défaut une production vide (on alors pour position
  le début du token précédent?) (BUG?). Par ailleurs, il faut être
  conscient que si l'action ocamllex se rappelle récursivement, alors
  _menhir_env.lexer.lex_start_p n'est pas le début du token mais une
  position quelque part à l'intérieur du token (e.g. après des espaces
  blancs). SUGGESTION DE SOLUTION: au lieu de paires (startpos, endpos),
  utiliser un type abstrait d'intervalles, avec un traitement particulier
  de l'intervalle vide. (Voir mon message du 15/09/2011.)

* BUG: message de Valentin Gatien-Baron du 09/01/2010: le bug de --explain
  est-il bien le bug connu? peut-on le corriger? ne suffirait-il pas de
  passer sous silence les conflits qui ont lieu dans une partie inaccessible
  de l'automate?

* BUG: message de Valentin Gatien-Baron du 09/01/2010: le warning erroné à
  propos d'un %prec inutile peut-il être évité?

* Implémenter un test de détection de boucles. Si la grammaire contient une
  boucle, elle est infiniment ambiguë. Pour le test, calculer tous les
  nullables, ajouter une production unité A -> B dès qu'il existe une
  production A -> alpha B beta avec alpha et beta nullables, et regarder
  ensuite s'il existe un cycle de productions unité.

POTTIER Francois's avatar
POTTIER Francois committed
113 114 115
* Permettre une trace avec autre chose que fprintf stderr. Cela permettrait
  au programmeur (par exemple) de décider à runtime s'il veut afficher ou
  non la trace.
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144

* (petit) BUG: --follow-construction n'affiche pas le contenu des états
  initiaux (r0)

* relire la preuve de Pager et comprendre si ce que fait Lr1.grow est correct
  ou pas; faut-il faire grossir les états existants, ou bien (par exemple) les
  supprimer et recommencer leur construction?

* que fait/que doit faire la combinaison --tokens-only --depend?

* Préserver dirname/ dans les directives #line émises.

* BUG: Boris (1.- bouclage parser sur une entrée erronée 2.- une lecture
  trop loin dans le stream, également liée à error).

* éviter "Warning: 22 conflicts ..." car emacs prend "Warning" pour un
  nom de fichier; d'après Damien, il devrait suffire que la phrase après
  les deux points ne commence pas par un nombre.

* ajouter une option -q pour désactiver tous les warnings

* si une variable est inutilisée dans une action sémantique, le
  warning est affiché dans le code produit.

* tirer au clair la sémantique des $startpos/$endpos sur les
  non-terminaux. Vérifier que %inline la préserve.

* BUG: solving a shift/reduce conflict in favor of reduction can
  cut a path that was required in order to explain another conflict.
POTTIER Francois's avatar
POTTIER Francois committed
145 146
  (see e.g. belloeil.mly) (et le reduced_parser.mly d'Adrien Guatto)
  Or just give up on explaining the conflict in this case.
147 148 149
  Take priorities into account *during* the construction of the
  automaton? Is it feasible? Compatible with Pager?

150 151
* BUG: cutdown.mly

152 153 154 155
* le fichier .conflicts devrait etre supprime par --explain s'il
  n'y a aucun conflit

* dans le dump de l'automate, rajouter les transitions qui ont
POTTIER Francois's avatar
POTTIER Francois committed
156 157
  ete supprimees par resolution de conflits. Afficher aussi les
  réductions par défaut?
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193

* BUG: l'élimination de %inline change la signification de $startpos
  et $endpos (qui devient relative à la nouvelle règle)

* expliquer aussi les conflits end-of-stream

* Documenter l'emploi d'ocamlbuild et décourager make/omake.

* Lorsqu'on crée un pseudo-lexème pour utiliser dans les
  directives %prec, la question de savoir s'il est associatif
  à gauche ou à droite ou pas du tout ne se posera jamais. Donc,
  pour faire propre, on ne devrait pas autoriser l'emploi de
  %left, %right, %nonassoc (sauf pour compatibilité arrière,
  avec warning) mais introduire un nouveau mot-clé %fictitious
  ou %pseudo ou whatever.

* Autre remarque du même tonneau, si on souhaite choisir un
  niveau mais pas un statut d'associativité (parce qu'on pense
  qu'il est inutile), il faudrait pouvoir déclarer %neutral
  (whatever) et obtenir un niveau au statut non-spécifié (d'où
  erreur si on tente de consulter ce statut).

* Prévoir une sortie --ocamlyacc qui affiche la grammaire sans
  les liaisons des valeurs sémantiques et sans les actions
  sémantiques?

* Faire le nécessaire pour empêcher les warnings d'ocaml 3.09
  sur les valeurs sémantiques nommées et non utilisées? Le
  problème est que l'erreur est forcément rapportée dans le
  fichier .ml engendré. Et ça résoudrait le problème du cas
  où on n'utilise que $startpos(v) et pas v.

* Il faudrait activer le warning qui recommande d'utiliser --infer
  dès que la librairie standard est utilisée (et pas seulement lorsque
  %inline est utilisé).