tokens
This commit is contained in:
parent
0e81edc636
commit
9b29e8fb8c
1 changed files with 22 additions and 17 deletions
|
@ -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:
|
||||||
|
|
Reference in a new issue