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