Attention une mise à jour du service Gitlab va être effectuée le mardi 18 janvier (et non lundi 17 comme annoncé précédemment) entre 18h00 et 18h30. 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.

TODO 11.5 KB
Newer Older
POTTIER Francois's avatar
POTTIER Francois committed
1
2
3
4
* autoriser %token FOO "foo"
  pour pouvoir afficher les tokens sous forme plus lisible
  et auto-générer une fonction (ou une table) print_terminal

POTTIER Francois's avatar
POTTIER Francois committed
5
6
7
8
* autoriser %token FOO (unused)
  (syntaxe concrète à déterminer)
  équivalent à --unused-token FOO sur la ligne de commande.

POTTIER Francois's avatar
POTTIER Francois committed
9
10
11
12
* BUG: --infer does not work when a non-terminal begins
  with a lowercase letter (Maxime Dénès).

* bench/Makefile no longer works on my Mac? (egrep problem)
POTTIER Francois's avatar
POTTIER Francois committed
13

14
15
* Document anonymous rules.
  Produce well-chosen (predictable) names for anonymous rules.
16
17
18
  In the standard library, possibly rename "anonymous" and "embedded"
  and document them. The non-inline version allows embedding an action in the
  middle of a rule.
19

POTTIER Francois's avatar
POTTIER Francois committed
20
21
22
23
* Should we always avoid querying the lexer before a default reduction?
  Would that be difficult/possible? Would that help people who want to
  trigger changes in the lexer?

24
* Produce well-chosen (predictable) names for anonymous rules?
25

POTTIER Francois's avatar
POTTIER Francois committed
26
27
* ErrorReporting: experiment with merging several symbols
  so as to reduce the noise (e.g. operators, expressions,
POTTIER Francois's avatar
POTTIER Francois committed
28
29
  etc.). Or just print the same way, but don't quotient
  internally, as the locations are not the same.
POTTIER Francois's avatar
POTTIER Francois committed
30

POTTIER Francois's avatar
POTTIER Francois committed
31
32
  Also, sort the explanations by a certain measure of
  complexity. E.g., those that go back to a "higher" non-terminal
POTTIER Francois's avatar
POTTIER Francois committed
33
34
35
36
37
38
39
  symbol should be preferred. Or those that go back further away
  in the buffer?

  Think about HTML output with mouse-over. Or mouse-click.
  Find a way of solving the scrolling problems.
    <pre> and <table> side by side, each with its scroll bar,
    would be nice.
POTTIER Francois's avatar
POTTIER Francois committed
40

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

POTTIER Francois's avatar
POTTIER Francois committed
43
44
45
46
* 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
47
* Generate default printers for terminal and nonterminal.
POTTIER Francois's avatar
POTTIER Francois committed
48
49
  Using modular implicits, generate terminal2token and
  nonterminal2value.
POTTIER Francois's avatar
POTTIER Francois committed
50

51
* IncrementalEngine: document [lr1state], [element], [view].
POTTIER Francois's avatar
POTTIER Francois committed
52
  Document the Inspection interface.
53

POTTIER Francois's avatar
POTTIER Francois committed
54
55
56
57
* 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).
58

POTTIER Francois's avatar
POTTIER Francois committed
59
* Confirm and understand why the code back-end slows down by 50%
POTTIER Francois's avatar
POTTIER Francois committed
60
61
  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
62

POTTIER Francois's avatar
POTTIER Francois committed
63
* Suite des patchs de Frédéric Bour.
POTTIER Francois's avatar
POTTIER Francois committed
64
    API d'inspection complète.
POTTIER Francois's avatar
POTTIER Francois committed
65
66
      Exposer le nombre d'états (pour la mémoisation) et une conversion état -> entier.
      Idem pour les productions.
POTTIER Francois's avatar
POTTIER Francois committed
67
68
    Librairie(s) pour la gestion des erreurs.
    Librairie pour la complétion du parsing.
POTTIER Francois's avatar
POTTIER Francois committed
69
      Need a way of feeding the parser a nonterminal symbol.
POTTIER Francois's avatar
POTTIER Francois committed
70
      Or a way of applying a semantic action to a vector of semantic values.
POTTIER Francois's avatar
POTTIER Francois committed
71
    Peut-on faire un noyau de Merlin indépendant de la grammaire?
72
73
74

* Meilleurs messages d'erreur de syntaxe.
    Revenir en arrière après une erreur, car l'erreur
POTTIER Francois's avatar
POTTIER Francois committed
75
76
77
    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
78
79
  Possibilité de coloriser ce qu'on a lu en indiquant ce qu'on a compris
  (sortie HTML).
POTTIER Francois's avatar
POTTIER Francois committed
80

POTTIER Francois's avatar
POTTIER Francois committed
81
82
83
* 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
84
85
86

* Tenter une minimisation a posteriori de l'automate. Sur la grammaire
  OCaml on devrait retrouver l'automate LALR, non?
POTTIER Francois's avatar
POTTIER Francois committed
87
88
89
90
91
92
93
94
95
96
97
98
  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
  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)
  Afficher combien de temps est passé à comprimer les tables.

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

100
101
* Could we avoid listing the contents of MenhirLib in 4 different files?

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

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

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

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

fpottier's avatar
fpottier committed
116
117
* _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
118
  ... it seems to loop now ...
119
120
121
122
123
124
125
126
127
128

* 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
129
130
  ocamlyacc (voir messages de Tiphaine Turpin à partir du 30/08/2011).
  Est-ce un problème? Peut-on documenter quelles sont les
131
132
133
134
  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
POTTIER Francois's avatar
POTTIER Francois committed
135
  si on réduit par défaut une production vide (on a alors pour position
136
137
138
139
140
141
142
143
  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.)

POTTIER Francois's avatar
POTTIER Francois committed
144
* Tirer au clair la sémantique des $startpos/$endpos sur les productions vides.
POTTIER Francois's avatar
POTTIER Francois committed
145
146
    Jacques-Henri dit que $startpos devrait toujours être $endpos du symbole précédent plus les blancs,
    et symétriquement pour $endpos. Mais pour implémenter ça il faut consulter la pile?
POTTIER Francois's avatar
POTTIER Francois committed
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
  BUG: %inline ne préserve pas la sémantique de $startpos/$endpos.
    C'est vrai pour les productions epsilon (forcément)
    mais aussi pour des productions non-epsilon
      car $startpos de la production inlinée est changée en $endpos(x) où x est le symbole précédent!
  Si on gérait les positions par macro-expansion *avant* de faire l'inlining
  alors la passe d'inlining n'aurait pas besoin de s'en occuper (et serait
  correcte par construction).

* 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
  `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).

* %inline pourrait-il fonctionner quand la règle à inliner utilise des $i?
* %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
168
169
170
* Reconnaître les directives # n "foo" dans le fichier .mly et en tenir
  compte dans les locations.

171
172
173
174
175
176
177
178
179
180
181
182
183
184
* 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
185
186
187
* 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.
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213

* (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.

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

219
220
* BUG: cutdown.mly

221
222
223
224
* 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
225
226
  ete supprimees par resolution de conflits. Afficher aussi les
  réductions par défaut?
227
228
229

* expliquer aussi les conflits end-of-stream

230
* Documenter l'emploi d'ocamlbuild.
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259

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