This commit is contained in:
Mylloon 2023-10-17 17:48:00 +02:00
parent 0e81edc636
commit 9b29e8fb8c
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -5,10 +5,9 @@
%} %}
/* Opérateurs à ajouter au fur et a mesure (pour réduire les warnings temporairement) :
* BINOP DO ELSE FOR FROM IF MATCH PIPE REF THEN TO UNTIL WHILE */
%token EOF LET TYPE WILDCARD STAR ARROW DPOINT EXTERN FUN COMMA AND EQUAL LPAREN %token EOF LET TYPE WILDCARD STAR ARROW DPOINT EXTERN FUN COMMA AND EQUAL LPAREN
%token RPAREN LBRACK RBRACK LBRACE RBRACE INFERIOR SUPERIOR %token RPAREN LBRACK RBRACK LBRACE RBRACE INFERIOR SUPERIOR BINOP DO ELSE FOR
%token FROM IF MATCH PIPE REF THEN TO UNTIL WHILE
%token<Mint.t> INT %token<Mint.t> INT
%token<string> ID TID CID %token<string> ID TID CID
@ -84,36 +83,42 @@ pattern:
} }
/* Ici on a un conflit entre : /* Pour résoudre un conflit, on a du split ty en 2 règles
*
* separated_nonempty_list(STAR,located(ty)) -> ty STAR separated_nonempty_list(STAR,located(ty)) * separated_nonempty_list(STAR,located(ty)) -> ty STAR separated_nonempty_list(STAR,located(ty))
* [ ty ] -> ty * [ ty ] * [ ty ] -> ty * [ ty ]
* ET * ET
* ty -> ty STAR separated_nonempty_list(STAR,located(ty)) * ty -> ty STAR separated_nonempty_list(STAR,located(ty))
* ty -> ty * [ ty ] * ty -> ty * [ ty ]
* */
* En gros il sait pas si il doit interpréter le premier type en tant que type simple_ty:
* ou en tant que list de type de 1 élément */
ty:
/* Application d'un constructeur de type */ /* Application d'un constructeur de type */
| tc=type_constructor l=list_ty { | tc=type_constructor l=list_ty {
TyCon(tc, l) TyCon(tc, l)
} }
/* Variables de type */
| type_var=type_variable {
TyVar(type_var)
}
/* Type entre parenthèses */
| LPAREN ty1=ty RPAREN {
ty1
}
ty:
/* Un type peut être un simple_type */
| t=simple_ty {
t
}
/* Fonctions */ /* Fonctions */
| ty1=located(ty) ARROW ty2=located(ty) { | ty1=located(ty) ARROW ty2=located(ty) {
TyArrow(ty1, ty2) TyArrow(ty1, ty2)
} }
/* N-uplets (N > 1) */ /* N-uplets (N > 1) */
| th=located(ty) STAR tt=separated_nonempty_list(STAR, located(ty)) { | th=located(simple_ty) STAR tt=separated_nonempty_list(STAR, located(simple_ty)) {
TyTuple(th :: tt) TyTuple(th :: tt)
} }
/* Variables de type */
| type_var=type_variable {
TyVar type_var
}
/* Type entre parenthèses */
| LPAREN ty1=ty RPAREN {
ty1
}
/* Auxilliaire pour TyCon dans ty */ /* Auxilliaire pour TyCon dans ty */
list_ty: list_ty: