Attention une mise à jour du service Gitlab va être effectuée le mardi 30 novembre entre 17h30 et 18h00. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes. Cette mise à jour intermédiaire en version 14.0.12 nous permettra de rapidement pouvoir mettre à votre disposition une version plus récente.

TODO 11.9 KB
Newer Older
1
* Ongoing work on positions.
POTTIER Francois's avatar
POTTIER Francois committed
2
  - remove the function [positions] in the incremental API? or update its doc.
POTTIER Francois's avatar
POTTIER Francois committed
3 4
  - on peut offrir un $symbolstartpos(i) qui calcule de la même
    manière que Parsing.symbol_start_pos.
POTTIER Francois's avatar
POTTIER Francois committed
5 6
  - tester que $startpos(i) est conforme à rhs_start_pos(i),
    idem pour end
POTTIER Francois's avatar
POTTIER Francois committed
7 8 9 10 11 12
  - document how positions are computed
  - concrete syntax for $endpos($0), and document it
  - document how to translate ocamlyacc positions to Menhir
  - document the fact that %inline preserves positions
    but can REORDER side effects! (the inlined semantic
    action is delayed to the beginning of the host semantic action)
13

POTTIER Francois's avatar
POTTIER Francois committed
14 15
* Simplify Error.logA, etc. by integrating a format argument.

POTTIER Francois's avatar
POTTIER Francois committed
16 17 18
* Develop an alternate src/Makefile that does not require ocamlbuild?
  Could use OCamlMakefile instead, for instance.

19 20 21 22
* A %type declaration with parameters is not properly checked;
  it could be useless or even ill-typed.
  Same for %on_error_reduce.

POTTIER Francois's avatar
POTTIER Francois committed
23 24 25 26 27 28 29
* Is it true that the warning "this production is never reduced" is
  sound but incomplete? i.e. certain states could be unreachable and
  we do not know it (but LRijkstra can tell us).
  Take never_reduced.mly and see if we can have a production that is
  never reduced *and no warning about it*. (Just place it behind
  another production that is never reduced.) Document this fact.

POTTIER Francois's avatar
POTTIER Francois committed
30 31 32 33 34 35
* Another crazy idea: if we had a special "void" non-terminal symbol,
  we could use it as a parameter, which would allow us to make extensible
  definitions. (Any production that contains void would be removed after
  expansion of the parameterized non-terminals.)
  This would allow some simplifications in CompCert's grammar.

36 37 38
* --compile-errors could warn about messages wider than 80 columns
                   could also warn statically about out-of-range $i?

POTTIER Francois's avatar
POTTIER Francois committed
39 40
* Dans les avantages de Menhir versus ocamlyacc (dans la doc et
  sur la page Web), ajouter le back-end Coq, l'API incrémentale
POTTIER Francois's avatar
POTTIER Francois committed
41 42
  et l'API d'inspection, les règles anonymes, la gestion fine des
  erreurs de syntaxe...
POTTIER Francois's avatar
POTTIER Francois committed
43

44
* Pénible que l'API d'inspection ne donne pas accès
45 46
  à l'état courant lorsque la pile est vide (état initial donc).
  Pourrait-on exposer cet état? Polymorphe? incoming_symbol
POTTIER Francois's avatar
POTTIER Francois committed
47
  devrait alors produit une option. Et le cas Nil du type
48
  stream devrait contenir l'état initial...
POTTIER Francois's avatar
POTTIER Francois committed
49
  attention, car si on lui applique la fonction items, on va
50 51 52 53
  obtenir un item spécial S' -> S # qui va poser problème.
  Exposer l'état initial avec un type différent lr1initial?
  De toute façon il faudra compliquer la notion de explanation
  qui ne pourra plus toujours être basée sur un item...
POTTIER Francois's avatar
POTTIER Francois committed
54

55 56 57
* gros BUG à corriger: il ne faut pas exiger le prochain token
  AVANT une réduction par défaut. Il faut suivre ocamlyacc et
  bison. Réfléchir... et corriger les deux back-ends. Attention
58 59
  toutefois, c'est un changement incompatible. Option de ligne
  de commande?
POTTIER Francois's avatar
POTTIER Francois committed
60
  (voir aussi messages de Tiphaine Turpin à partir du 30/08/2011)
POTTIER Francois's avatar
POTTIER Francois committed
61 62
  Idée de F. Bour: on pourrait annoter une production %default
  pour indiquer qu'elle doit toujours être réduite par défaut.
63
  Réfléchir à l'impact sur les positions.
POTTIER Francois's avatar
POTTIER Francois committed
64
  Il faut aussi revisiter la notion de conflit end-of-stream.
65 66 67 68
  - si réduction par défaut, alors pas de conflit possible!
  - si conflit, alors pourquoi on le résoud en éliminant la
    réduction sur #? on pourrait faire aussi le choix opposé,
    à savoir éliminer toutes les autres actions. Que fait
POTTIER Francois's avatar
POTTIER Francois committed
69
    ocamlyacc?
70

POTTIER Francois's avatar
POTTIER Francois committed
71 72
* autoriser %token FOO "foo"
  pour pouvoir afficher les tokens sous forme plus lisible
73
  et auto-générer une fonction (ou une table) print_terminal
POTTIER Francois's avatar
POTTIER Francois committed
74

POTTIER Francois's avatar
POTTIER Francois committed
75
* autoriser %token FOO (unused)
76 77
  (syntaxe concrète à déterminer)
  équivalent à --unused-token FOO sur la ligne de commande.
POTTIER Francois's avatar
POTTIER Francois committed
78

79
* Produce well-chosen (predictable) names for anonymous rules?
POTTIER Francois's avatar
POTTIER Francois committed
80

81 82
* In the standard library, possibly rename "anonymous" and "embedded" and
  document them. The non-inline version allows embedding an action in the
83
  middle of a rule.
84

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

POTTIER Francois's avatar
POTTIER Francois committed
87 88 89 90
* 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
91
* Generate default printers for terminal and nonterminal.
POTTIER Francois's avatar
POTTIER Francois committed
92 93
  Using modular implicits, generate terminal2token and
  nonterminal2value.
POTTIER Francois's avatar
POTTIER Francois committed
94

POTTIER Francois's avatar
POTTIER Francois committed
95 96 97 98
* 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).
99

100 101
* Suite des patchs de Frédéric Bour.
    API d'inspection complète.
POTTIER Francois's avatar
POTTIER Francois committed
102
      Documenter loop_handle_undo, loop_test, acceptable.
103
      Exposer le nombre d'états (pour la mémoisation).
POTTIER Francois's avatar
POTTIER Francois committed
104
      Idem pour les productions.
POTTIER Francois's avatar
POTTIER Francois committed
105 106
      Fonctions d'affichage pour les types terminal, nonterminal, etc.?
      Fonctions d'isomorphisme entre token et 'a terminal * 'a?
POTTIER Francois's avatar
POTTIER Francois committed
107
    Librairie(s) pour la gestion des erreurs.
108
    Librairie pour la complétion du parsing.
POTTIER Francois's avatar
POTTIER Francois committed
109
      Need a way of feeding the parser a nonterminal symbol.
POTTIER Francois's avatar
POTTIER Francois committed
110
      Or a way of applying a semantic action to a vector of semantic values.
111

POTTIER Francois's avatar
POTTIER Francois committed
112 113 114
* Test and document --lalr (maybe). Explain that it is (probably)
  incompatible in principle with --explain. Modify the code to fail
  gracefully when the problem arises.
POTTIER Francois's avatar
POTTIER Francois committed
115

POTTIER Francois's avatar
POTTIER Francois committed
116
* BUG: %inline ne préserve pas la sémantique de $startpos/$endpos.
117
    C'est vrai pour les productions epsilon (forcément)
POTTIER Francois's avatar
POTTIER Francois committed
118
    mais aussi pour des productions non-epsilon
119
      car $startpos de la production inlinée est changée en $endpos(x) où x est le symbole précédent!
POTTIER Francois's avatar
POTTIER Francois committed
120

POTTIER Francois's avatar
POTTIER Francois committed
121 122 123
* BUG: --only-preprocess imprime des actions sémantiques où les $ ont
  été remplacés par _, ce qui rend la grammaire invalide.

POTTIER Francois's avatar
POTTIER Francois committed
124 125
* Tenter une minimisation a posteriori de l'automate. Sur la grammaire
  OCaml on devrait retrouver l'automate LALR, non?
126 127 128
  Faire cette minimisation *après* la résolution des conflits afin que
  la minimisation n'affecte pas le comportement de l'automate, même en
  présence de directives de priorité. Du coup si on combine --canonical
POTTIER Francois's avatar
POTTIER Francois committed
129 130 131 132 133
  et --minimize alors on devrait obtenir un automate correct, proche de
  IELR, voir Denny et Malloy. Confirmer.

* Pourquoi --canonical --table ne marche pas sur une grosse grammaire?
  (3m57 pour ocaml.mly versus 16s sans --table)
134
  Afficher combien de temps est passé à comprimer les tables.
POTTIER Francois's avatar
POTTIER Francois committed
135 136

* TableBackend en principe ne devrait pas avoir besoin de Invariant?
137
  Gain de temps/simplicité possible.
POTTIER Francois's avatar
POTTIER Francois committed
138

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

POTTIER Francois's avatar
POTTIER Francois committed
142 143
* Clarifier si ocamlbuild doit recevoir -use-ocamlfind, -no-ocamlfind,
  ou rien; tester en particulier sous Windows?
POTTIER Francois's avatar
POTTIER Francois committed
144
  Modifier la doc pour recommander ocamlfind.
POTTIER Francois's avatar
POTTIER Francois committed
145

146 147
* ajouter une possibilité de désactiver certains warnings (utile pour
  le cours de compilation où on démarre avec une grammaire à trous),
fpottier's avatar
fpottier committed
148 149
  par exemple les non-terminaux inaccessibles

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

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

156 157 158
* 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
159 160
  non-terminaux), non? (Jacques-Henri.)

POTTIER Francois's avatar
POTTIER Francois committed
161 162 163
* En mode code on tire les tokens d'un lexbuf et l'utilisateur doit construire
  l'API moderne par `wrapping', s'il la souhaite. Mais en mode table l'API
  moderne est native et l'API traditionnelle est construite (par nous) par
164 165 166 167
  `wrapping', d'où risque de `double wrapping' pour un utilisateur qui veut
  alterner entre code et table. On devrait exposer nous-mêmes les deux API.
  En profiter pour laisser l'utilisateur contrôler comment un token doit
  être emballé en `fat token' (token + range).
POTTIER Francois's avatar
POTTIER Francois committed
168

169 170 171
* %inline pourrait-il fonctionner quand les productions à inliner ont un %prec?
    (ça aurait un sens au moins quand on inline dans une production unité?)
    (ou plus généralement quand on inline en dernière position?)
POTTIER Francois's avatar
POTTIER Francois committed
172

173
* Reconnaître les directives # n "foo" dans le fichier .mly et en tenir
POTTIER Francois's avatar
POTTIER Francois committed
174 175
  compte dans les locations.

176 177 178 179 180
* 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?

181 182 183
* 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
184
  production A -> alpha B beta avec alpha et beta nullables, et regarder
185
  ensuite s'il existe un cycle de productions unité.
186

POTTIER Francois's avatar
POTTIER Francois committed
187
* Permettre une trace avec autre chose que fprintf stderr. Cela permettrait
188 189 190
  au programmeur (par exemple) de décider à runtime s'il veut afficher ou
  non la trace. (En mode --trace.) Et si possible, donner accès depuis
  l'extérieur à la fonction print_token qui est engendrée.
191

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

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

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

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

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

206 207
* é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
208 209
  les deux points ne commence pas par un nombre.

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

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

215 216 217 218
* si une parenthèse est mal fermée dans une action sémantique,
  l'erreur de syntaxe peut être détectée par OCaml en dehors
  des actions sémantiques. Bétonner en mettant une séquence
  improbable de begin/end/parenthèseses autour de l'action?
219 220 221

* 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
222 223
  (see e.g. belloeil.mly) (et le reduced_parser.mly d'Adrien Guatto)
  Or just give up on explaining the conflict in this case.
224 225 226
  Take priorities into account *during* the construction of the
  automaton? Is it feasible? Compatible with Pager?

227 228
* BUG: cutdown.mly

229 230 231 232
* 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
233
  ete supprimees par resolution de conflits. Afficher aussi les
234
  réductions par défaut?
235 236 237

* expliquer aussi les conflits end-of-stream

238
* Documenter l'emploi d'ocamlbuild.
239

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

248 249 250 251
* 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ù
252 253
  erreur si on tente de consulter ce statut).

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

258 259 260 261 262
* 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.
263