Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
POTTIER Francois
menhir
Commits
e7b2a0b6
Commit
e7b2a0b6
authored
Sep 01, 2015
by
HINDERER Sebastien
Browse files
Change encoding of TODO file from Latin-1 to UTF-8.
parent
102dccb8
Changes
1
Hide whitespace changes
Inline
Side-by-side
TODO
View file @
e7b2a0b6
* BUG dans ErrorReporting si l'erreur se produit dans l'
é
tat
initial. P
é
nible que l'API d'inspection ne donne pas acc
è
s
à
l'
é
tat courant lorsque la pile est vide (
é
tat initial donc).
Pourrait-on exposer cet
é
tat? Polymorphe? incoming_symbol
* BUG dans ErrorReporting si l'erreur se produit dans l'
ét
at
initial. P
én
ible que l'API d'inspection ne donne pas accè
s
à
l'é
ta
t courant lorsque la pile est vide (ét
at
initial donc).
Pourrait-on exposer cet
ét
at? Polymorphe? incoming_symbol
devrait alors produit une option. Et le cas Nil du type
stream devrait contenir l'
é
tat initial...
stream devrait contenir l'
ét
at initial...
attention, car si on lui applique la fonction items, on va
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...
obtenir un item sp
éc
ial S' -> S # qui va poser problè
me
.
Exposer l'
ét
at initial avec un type diffé
re
nt lr1initial?
De toute fa
ço
n il faudra compliquer la notion de explanation
qui ne pourra plus toujours
êt
re basé
e
sur un item...
* Gabriel veut pouvoir inclure MenhirLib dans le parser engendr
é
* Gabriel veut pouvoir inclure MenhirLib dans le parser engendr
é
* 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
* gros BUG
à
corriger: il ne faut pas exiger le prochain token
AVANT une r
éd
uction par dé
fa
ut. Il faut suivre ocamlyacc et
bison. R
éfléch
ir... et corriger les deux back-ends. Attention
toutefois, c'est un changement incompatible. Option de ligne
de commande?
R
éflé
chir
à
l'impact sur les positions.
R
éfléch
ir à
l'
impact sur les positions.
Il faut aussi revisiter la notion de conflit end-of-stream.
- 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
- si r
éd
uction par dé
fa
ut, alors pas de conflit possible!
- si conflit, alors pourquoi on le r
és
oud en é
li
minant la
r
éd
uction sur #? on pourrait faire aussi le choix opposé
,
à
savoir é
li
miner toutes les autres actions. Que fait
ocamlyacc?
* 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
et auto-g
énére
r une fonction (ou une table) print_terminal
* autoriser %token FOO (unused)
(syntaxe concr
è
te
à dé
terminer)
é
quivalent
à
--unused-token FOO sur la ligne de commande.
(syntaxe concr
èt
e à
déter
miner)
éq
uivalent à
-
-unused-token FOO sur la ligne de commande.
* BUG: --infer does not work when a non-terminal begins
with a lowercase letter (Maxime D
énè
s).
with a lowercase letter (Maxime D
énès)
.
* bench/Makefile no longer works on my Mac? (egrep problem)
...
...
@@ -84,70 +84,70 @@
between 4.01.0 and 4.02.1. Use the tag last309 for this purpose,
or the master branch.
* Suite des patchs de Fr
édé
ric Bour.
API d'inspection compl
è
te.
Exposer le nombre d'
é
tats (pour la m
é
moisation) et une conversion
é
tat -> entier.
* Suite des patchs de Fr
édéri
c Bour.
API d'inspection compl
èt
e.
Exposer le nombre d'
ét
ats (pour la mé
mo
isation) et une conversion ét
at
-> entier.
Idem pour les productions.
Fonctions d'affichage pour les types terminal, nonterminal, etc.?
Fonctions d'isomorphisme entre token et 'a terminal * 'a?
Librairie(s) pour la gestion des erreurs.
Librairie pour la compl
é
tion du parsing.
Librairie pour la compl
ét
ion du parsing.
Need a way of feeding the parser a nonterminal symbol.
Or a way of applying a semantic action to a vector of semantic values.
* Meilleurs messages d'erreur de syntaxe.
Revenir en arri
è
re apr
è
s une erreur, car l'erreur
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.
Possibilit
é
de coloriser ce qu'on a lu en indiquant ce qu'on a compris
Revenir en arri
èr
e aprè
s
une erreur, car l'erreur
n'est d
ét
ecté
e
qu'après
q
uelques rédu
ct
ions. Une fois que l'on est
revenu, on peut examiner les items de l'
ét
at courant et donner des
positions de d
éb
ut d'item qui devraient ê
tr
e intér
es
santes.
Possibilit
é
de coloriser ce qu'on a lu en indiquant ce qu'on a compris
(sortie HTML).
* 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.
* les positions fournies par menhir ne sont pas les m
ê
mes fournies par
ocamlyacc (voir messages de Tiphaine Turpin
à
partir du 30/08/2011).
Est-ce un probl
è
me? Peut-on documenter quelles sont les
* les positions fournies par menhir ne sont pas les m
êm
es fournies par
ocamlyacc (voir messages de Tiphaine Turpin
à
partir du 30/08/2011).
Est-ce un probl
èm
e? Peut-on documenter quelles sont les
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 a 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
vide, Menhir utilise _menhir_env.lexer.lex_start_p, c'est-
à-
dire le
d
éb
ut du dernier token lu par le lexer; en principe c'est le token
de lookahead donc
ça
va, mais ç
a
pourrait donner un rés
ul
tat bizarre
si on r
éd
uit par dé
fa
ut une production vide (on a alors pour position
le d
éb
ut du token pré
céden
t?) (BUG?). Par ailleurs, il faut êtr
e
conscient que si l'action ocamllex se rappelle r
éc
ursivement, alors
_menhir_env.lexer.lex_start_p n'est pas le d
éb
ut du token mais une
position quelque part
à
l'inté
ri
eur du token (e.g. après
d
es 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.)
* Tirer au clair la s
é
mantique des $startpos/$endpos sur les productions vides.
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?
BUG: %inline ne pr
é
serve pas la s
é
mantique de $startpos/$endpos.
C'est vrai pour les productions epsilon (forc
é
ment)
* Tirer au clair la s
ém
antique des $startpos/$endpos sur les productions vides.
Jacques-Henri dit que $startpos devrait toujours
êt
re $endpos du symbole pré
céden
t plus les blancs,
et sym
ét
riquement pour $endpos. Mais pour implé
me
nter ça
i
l faut consulter la pile?
BUG: %inline ne pr
és
erve pas la sé
ma
ntique de $startpos/$endpos.
C'est vrai pour les productions epsilon (forc
ém
ent)
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
car $startpos de la production inlin
ée
est changé
e
en $endpos(x) où
x
est le symbole précé
dent!
Si on g
ér
ait 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).
* Tenter une minimisation a posteriori de l'automate. Sur la grammaire
OCaml on devrait retrouver l'automate LALR, non?
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
Faire cette minimisation *apr
ès
* la ré
so
lution des conflits afin que
la minimisation n'affecte pas le comportement de l'automate, m
êm
e en
pr
és
ence 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.
Afficher combien de temps est pass
é à c
omprimer les tables.
* TableBackend en principe ne devrait pas avoir besoin de Invariant?
Gain de temps/simplicit
é
possible.
Gain de temps/simplicit
é
possible.
* Could we avoid listing the contents of MenhirLib in 4 different files?
...
...
@@ -158,38 +158,38 @@
ou rien; tester en particulier sous Windows?
Modifier la doc pour recommander ocamlfind.
* ajouter une possibilit
é
de d
é
sactiver certains warnings (utile pour
le cours de compilation o
ù
on d
é
marre avec une grammaire
à
trous),
* ajouter une possibilit
é
de dé
sa
ctiver certains warnings (utile pour
le cours de compilation o
ù
on dé
ma
rre avec une grammaire à
tr
ous),
par exemple les non-terminaux inaccessibles
* move to a new license (GPL V2?), as per Hongbo Zhang's request.
* Les fichiers dans demos/ ne devraient pas
ê
tre sous QPL mais libres...
* Les fichiers dans demos/ ne devraient pas
êt
re sous QPL mais libres...
* _stage2/menhir.native --interpret fancy-parser.mly
crashes with Stack_overflow when the input is just "grammar:\n"
... it seems to loop now ...
* BUG: la directive $type<...> nt donne lieu
à
un message d'erreur bizarre
* 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
* On pourrait rendre moins restrictif le crit
èr
e qui garantit la terminaison
de l'expansion des non-terminaux param
étrés.
Il suffirait de vér
if
ier que
les param
èt
res effectifs sont toujours des atomes (symboles terminaux ou
non-terminaux), non? (Jacques-Henri.)
* 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).
`wrapping', d'o
ù
risque de `double wrapping' pour un utilisateur qui veut
alterner entre code et table. On devrait exposer nous-m
êm
es les deux API.
En profiter pour laisser l'utilisateur contr
ôl
er comment un token doit
êt
re emballé
e
n `fat token' (token + range).
* %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?)
* %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éra
lement quand on inline en dernièr
e
position?)
* Reconna
î
tre les directives # n "foo" dans le fichier .mly et en tenir
* Reconna
ît
re les directives # n "foo" dans le fichier .mly et en tenir
compte dans les locations.
* BUG: message de Valentin Gatien-Baron du 09/01/2010: le bug de --explain
...
...
@@ -197,47 +197,47 @@
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
é
?
* BUG: message de Valentin Gatien-Baron du 09/01/2010: le warning erron
é à
propos d'un %prec inutile peut-il
êt
re é
vi
té?
* 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
* Impl
ém
enter un test de dé
te
ction 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
é
.
ensuite s'il existe un cycle de productions unit
é.
* 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. (En mode --trace.) Et si possible, donner acc
è
s depuis
l'ext
é
rieur
à
la fonction print_token qui est engendr
é
e.
au programmeur (par exemple) de d
éc
ider à
r
untime s'il veut afficher ou
non la trace. (En mode --trace.) Et si possible, donner acc
ès
depuis
l'ext
ér
ieur à
l
a fonction print_token qui est engendrée
.
* (petit) BUG: --follow-construction n'affiche pas le contenu des
é
tats
* (petit) BUG: --follow-construction n'affiche pas le contenu des
ét
ats
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
ou pas; faut-il faire grossir les
ét
ats 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.
* Pr
és
erver dirname/ dans les directives #line é
mi
ses.
* BUG: Boris (1.- bouclage parser sur une entr
é
e erron
é
e 2.- une lecture
trop loin dans le stream,
é
galement li
ée à
error).
* BUG: Boris (1.- bouclage parser sur une entr
ée
erroné
e
2.- une lecture
trop loin dans le stream,
ég
alement lié
e à er
ror).
*
é
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
*
év
iter "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
* ajouter une option -q pour d
és
activer tous les warnings
* si une variable est inutilis
é
e dans une action s
é
mantique, le
warning est affich
é
dans le code produit.
* si une variable est inutilis
ée
dans une action sé
ma
ntique, le
warning est affich
é
dans le code produit.
* 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?
* si une parenth
ès
e est mal fermé
e
dans une action sém
an
tique,
l'erreur de syntaxe peut
êt
re dé
te
ctée
p
ar OCaml en dehors
des actions s
ém
antiques. Bé
to
nner en mettant une séq
ue
nce
improbable de begin/end/parenth
ès
eses autour de l'action?
* BUG: solving a shift/reduce conflict in favor of reduction can
cut a path that was required in order to explain another conflict.
...
...
@@ -253,37 +253,37 @@
* dans le dump de l'automate, rajouter les transitions qui ont
ete supprimees par resolution de conflits. Afficher aussi les
r
é
ductions par d
é
faut?
r
éd
uctions par dé
fa
ut?
* expliquer aussi les conflits end-of-stream
* Documenter l'emploi d'ocamlbuild.
* Lorsqu'on cr
é
e un pseudo-lex
è
me pour utiliser dans les
* 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,
à
gauche ou à
d
roite 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
%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
ù
* Autre remarque du m
êm
e 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
éc
larer %neutral
(whatever) et obtenir un niveau au statut non-sp
éc
ifié
(
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?
* Pr
év
oir une sortie --ocamlyacc qui affiche la grammaire sans
les liaisons des valeurs s
ém
antiques et sans les actions
s
ém
antiques?
* 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.
* Faire le n
éc
essaire pour empê
ch
er les warnings d'ocaml 3.09
sur les valeurs s
ém
antiques nommé
es
et non utilisée
s?
Le
probl
èm
e est que l'erreur est forcé
me
nt rapportée
d
ans le
fichier .ml engendr
é.
Et ç
a
rés
ou
drait le problème
d
u 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
é
).
d
ès
que la librairie standard est utilisé
e
(et pas seulement lorsque
%inline est utilis
é)
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment