conflict
This commit is contained in:
commit
8ed2b0c51f
5 changed files with 141 additions and 113 deletions
|
@ -110,7 +110,7 @@ and branch =
|
||||||
| Branch of pattern located * expression located
|
| Branch of pattern located * expression located
|
||||||
|
|
||||||
and ty =
|
and ty =
|
||||||
(** An instantiated type constructor [t <ty₁, .., tyₙ>]. *)
|
(** An instantiated type constructor [t <ty₁, ..., tyₙ>]. *)
|
||||||
| TyCon of type_constructor * ty located list
|
| TyCon of type_constructor * ty located list
|
||||||
(** A function type [ty₁ → ty₂]. *)
|
(** A function type [ty₁ → ty₂]. *)
|
||||||
| TyArrow of ty located * ty located
|
| TyArrow of ty located * ty located
|
||||||
|
|
|
@ -71,7 +71,9 @@ list_ty: LPAREN l=separated_nonempty_list(COMMA,located(ty)) RPAREN {
|
||||||
|
|
||||||
|
|
||||||
label_with_type:
|
label_with_type:
|
||||||
| l=located(label) COLON t=located(ty) { l, t }
|
| l=located(label) COLON t=located(ty) {
|
||||||
|
l, t
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
vdefinition:
|
vdefinition:
|
||||||
|
@ -352,13 +354,18 @@ simple_expression:
|
||||||
Apply(e1, e2)
|
Apply(e1, e2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
/* TODO operation binaire mais j'ai pas très bien compris encore */
|
||||||
|
|
||||||
|
>>>>>>> 726daf228d20fae695ecf903491c8b62d9e6a673
|
||||||
|
|
||||||
/* Match (exp) {| ...| ... | ...} */
|
/* Match (exp) {| ...| ... | ...} */
|
||||||
| MATCH LPAREN e=located(expression) RPAREN
|
| MATCH LPAREN e=located(expression) RPAREN LBRACE b=branches RBRACE {
|
||||||
LBRACE b=branches RBRACE {
|
|
||||||
Case(e, b)
|
Case(e, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
/* TODO if ( exp ) then { expr } j'ai RIEN COMPRIS */
|
/* TODO if ( exp ) then { expr } j'ai RIEN COMPRIS */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -375,14 +382,28 @@ simple_expression:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reference ref expr */
|
/* Reference ref expr */
|
||||||
|
=======
|
||||||
|
/* TODO if ( exp ) then { expr } j'ai RIEN COMPRIS */
|
||||||
|
/* | IF LPAREN e=located(expression) RPAREN
|
||||||
|
THEN LBRACE e2=located(expression) RBRACE {
|
||||||
|
IfThenElse(e, e2, None)
|
||||||
|
} */
|
||||||
|
>>>>>>> 726daf228d20fae695ecf903491c8b62d9e6a673
|
||||||
|
|
||||||
|
/* if ( expr ) then { expr } else { expr } */
|
||||||
|
| IF LPAREN e=located(expression) RPAREN
|
||||||
|
THEN LBRACE e2=located(expression) RBRACE
|
||||||
|
ELSE LBRACE e3=located(expression) RBRACE {
|
||||||
|
IfThenElse(e, e2, e3)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reference ref expr */
|
||||||
| REF e=located(expression) {
|
| REF e=located(expression) {
|
||||||
Ref(e)
|
Ref(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Affectation */
|
/* Affectation
|
||||||
/* expr := expr */
|
* expr := expr */
|
||||||
|
|
||||||
| e1=located(expression) ASSIGN e2=located(expression) {
|
| e1=located(expression) ASSIGN e2=located(expression) {
|
||||||
Assign(e1, e2)
|
Assign(e1, e2)
|
||||||
}
|
}
|
||||||
|
@ -394,27 +415,36 @@ simple_expression:
|
||||||
While(e, e2)
|
While(e, e2)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do while TODO */
|
/* Do while
|
||||||
/* do { expr } until ( expr ) */
|
* do { expr } until ( expr ) */
|
||||||
|
/* TODO */
|
||||||
|
|
||||||
/* boucle for */
|
/* boucle for
|
||||||
/* for x in (e1 to e2) { expr } */
|
* for x in (e1 to e2) { expr } */
|
||||||
| FOR x=located(identifier)
|
| FOR x=located(identifier)
|
||||||
FROM LPAREN e1=located(expression) RPAREN TO LPAREN e2=located(expression) RPAREN
|
FROM LPAREN e1=located(expression) RPAREN TO LPAREN e2=located(expression) RPAREN
|
||||||
LBRACE e3=located(expression) RBRACE
|
LBRACE e3=located(expression) RBRACE {
|
||||||
{ For(x,e1,e2,e3)}
|
For(x, e1, e2, e3)
|
||||||
|
}
|
||||||
|
|
||||||
/* Parenthésage pas sûr mais je vois pas sinon */
|
/* Parenthésage pas sûr mais je vois pas sinon */
|
||||||
| LPAREN e=expression RPAREN {
|
| LPAREN e=expression RPAREN {
|
||||||
e
|
e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
|
||||||
|
|
||||||
/* Annotation de type */
|
/* Annotation de type */
|
||||||
/* (e : ty) */
|
/* (e : ty) */
|
||||||
| LPAREN e=located(expression) COLON t=located(ty) RPAREN {
|
| LPAREN e=located(expression) COLON t=located(ty) RPAREN {
|
||||||
TypeAnnotation(e,t)
|
TypeAnnotation(e,t)
|
||||||
|
=======
|
||||||
|
/* Annotation de type
|
||||||
|
* (e : ty) */
|
||||||
|
| LPAREN e=located(expression) COLON t=located(ty) RPAREN {
|
||||||
|
TypeAnnotation(e, t)
|
||||||
|
>>>>>>> 726daf228d20fae695ecf903491c8b62d9e6a673
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,11 +32,12 @@ let rec program p =
|
||||||
|
|
||||||
and definition = function
|
and definition = function
|
||||||
| DefineType (t, ts, tdef) ->
|
| DefineType (t, ts, tdef) ->
|
||||||
|
let eq = match tdef with Abstract -> empty | _ -> string "=" in
|
||||||
nest 2 (
|
nest 2 (
|
||||||
group (group (string "type"
|
group (group (string "type"
|
||||||
++ located type_constructor t
|
++ located type_constructor t
|
||||||
^^ group (type_parameters_angles ts))
|
^^ group (type_parameters_angles ts))
|
||||||
++ string "=")
|
++ eq)
|
||||||
++ type_definition tdef)
|
++ type_definition tdef)
|
||||||
| DeclareExtern (x, t) ->
|
| DeclareExtern (x, t) ->
|
||||||
group (string "extern" ++ located identifier x
|
group (string "extern" ++ located identifier x
|
||||||
|
|
|
@ -2,11 +2,8 @@ open HopixAST
|
||||||
|
|
||||||
(** Abstract syntax for types.
|
(** Abstract syntax for types.
|
||||||
|
|
||||||
The following internal syntax for types is the same as the one for
|
The following internal syntax for types is the same as the one for the types
|
||||||
the types [ty] defined in {!HopixAST} except that all positions
|
[ty] defined in {!HopixAST} except that all positions have been erased. *)
|
||||||
have been erased.
|
|
||||||
|
|
||||||
*)
|
|
||||||
type aty =
|
type aty =
|
||||||
| ATyVar of type_variable
|
| ATyVar of type_variable
|
||||||
| ATyCon of type_constructor * aty list
|
| ATyCon of type_constructor * aty list
|
||||||
|
|
Binary file not shown.
Reference in a new issue