Comment gérer les operateurs ?
Pour interpréter par exemple a + b, on inteprète cela par :
App(App("`+`",a),b)
On peut le voir dans le pretty printer je sais plus où
Comment parser une liste ?
exe : r -> t
\-> located(r) -> t located
(une règle r qui produit un type t)
pour en faire :
r,...,...,r -> t list
\-> located(r)...located(r) > (t located) list
Menhir permet de faire
r,...,...,r -> t list
separated-list(COMMA,r)
located(r)...located(r) > (t located) list
separated_list(COMMA,located(r))
separated_nonempty_list(COMMA,r)
Pour avoir des options, on a dans menhir option(t) -> t option
Pour voir comment implémenter separated_list nous même, on peut regarder le depot git de menhir
/src/standard.mly
(%public)%inline separated_nonempty_list(sep,r)
| x = r {[r]}
| x = r; sep; t= separated_noempty_list(sep,r)
{x::t}
Dans ce fichier y’a aussi des list sans separateurs