136 -> 30 conflicts
This commit is contained in:
parent
cd04e3c0fc
commit
5f48faa278
1 changed files with 31 additions and 17 deletions
|
@ -1,6 +1,7 @@
|
||||||
%{ (* -*- tuareg -*- *)
|
%{ (* -*- tuareg -*- *)
|
||||||
|
|
||||||
open HopixAST
|
open HopixAST
|
||||||
|
(* open Position *)
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
@ -15,30 +16,40 @@
|
||||||
%token<char> CHAR
|
%token<char> CHAR
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%start<HopixAST.t> program
|
%start<HopixAST.t> program
|
||||||
|
|
||||||
/* TODO: Résoudre tout les shift/reduce conflits */
|
/* TODO: Résoudre tout les shift/reduce conflits */
|
||||||
|
|
||||||
|
%left LPAREN
|
||||||
|
%left let1
|
||||||
|
|
||||||
%left FUN
|
%left FUN
|
||||||
%left STRING
|
%left STRING
|
||||||
%left INT
|
%left INT CID CHAR WHILE
|
||||||
%right WHILE REF DO
|
%left ID
|
||||||
|
%right REF DO
|
||||||
%left LET MATCH IF FOR
|
%left LET MATCH IF FOR
|
||||||
%right ARROW
|
%right ARROW
|
||||||
%right SEMICOLON
|
%right SEMICOLON
|
||||||
|
%left DOT
|
||||||
%left ASSIGN
|
%left ASSIGN
|
||||||
%left LPAREN
|
%left LBRACE
|
||||||
%left BACKSLASH
|
%left BACKSLASH
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%left EXCLA COLON
|
%left EXCLA COLON
|
||||||
|
|
||||||
/* Priorités binop */
|
/* priorités binop */
|
||||||
|
|
||||||
%left D_OR
|
%left D_OR
|
||||||
%left D_AND
|
%left D_AND
|
||||||
%left EQUAL_OP INF_EQUAL_OP INF_OP SUP_EQUAL_OP SUP_OP
|
%left EQUAL_OP INF_EQUAL_OP INF_OP SUP_EQUAL_OP SUP_OP
|
||||||
%left PLUS MINUS
|
%left PLUS MINUS
|
||||||
%left SLASH STAR
|
%left SLASH STAR
|
||||||
|
|
||||||
%left let1
|
|
||||||
%left fun1
|
%left fun1
|
||||||
|
|
||||||
|
|
||||||
|
@ -116,14 +127,14 @@ label_with_type:
|
||||||
vdefinition:
|
vdefinition:
|
||||||
/* Valeur simple */
|
/* Valeur simple */
|
||||||
| LET i=located(identifier) ts=option(vdef_type_scheme)
|
| LET i=located(identifier) ts=option(vdef_type_scheme)
|
||||||
EQUAL e=located(expression) %prec let1 {
|
EQUAL e=located(expression) %prec let1{
|
||||||
SimpleValue(i, ts, e)
|
SimpleValue(i, ts, e)
|
||||||
}
|
}
|
||||||
/* Fonction(s)
|
/* Fonction(s)
|
||||||
* Exemple :
|
* Exemple :
|
||||||
* - fun : int f a = 1
|
* - fun : int f a = 1
|
||||||
* - fun f a = 1 and : int g a = 2 */
|
* - fun f a = 1 and : int g a = 2 */
|
||||||
| FUN fl=separated_nonempty_list(AND_KW, fundef) {
|
| FUN fl=separated_nonempty_list(AND_KW, fundef) {
|
||||||
RecFunctions(fl)
|
RecFunctions(fl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,13 +342,16 @@ expression:
|
||||||
}
|
}
|
||||||
/* Sequence - Séquencement *
|
/* Sequence - Séquencement *
|
||||||
* Pas sûr, voir s'il ne faut pas une troisième couche d'expression */
|
* Pas sûr, voir s'il ne faut pas une troisième couche d'expression */
|
||||||
|
|
||||||
| e=located(simple_expression)
|
| e=located(simple_expression)
|
||||||
SEMICOLON e_list=separated_nonempty_list(SEMICOLON, located(simple_expression)) {
|
SEMICOLON e_list=separated_nonempty_list(SEMICOLON, located(simple_expression)) {
|
||||||
Sequence(e :: e_list)
|
Sequence(e :: e_list)
|
||||||
}
|
}
|
||||||
/* | e1=located(expression) SEMICOLON e2=located(expression) {
|
/*
|
||||||
Sequence([e1; e2])
|
|e1=located(expression) SEMICOLON e2=located(expression){
|
||||||
} */
|
Sequence([e1;e2])
|
||||||
|
}*/
|
||||||
|
|
||||||
/* Definition locale */
|
/* Definition locale */
|
||||||
| vd=vdefinition SEMICOLON e=located(expression) {
|
| vd=vdefinition SEMICOLON e=located(expression) {
|
||||||
Define(vd, e)
|
Define(vd, e)
|
||||||
|
|
Reference in a new issue