30 lines
714 B
OCaml
30 lines
714 B
OCaml
%{
|
|
open Structs;;
|
|
%}
|
|
|
|
/* Description des lexèmes définis dans lexer.mll */
|
|
%token LPAREN RPAREN RARROW TILDE FALSE
|
|
%token <string> VAR_NAME
|
|
%token <string> TYPE_NAME
|
|
%token ENDL EOF
|
|
|
|
/* L'ordre de définition définit la priorité */
|
|
%left RARROW
|
|
%nonassoc TILDE
|
|
|
|
%start main_type
|
|
%type <Structs.ty> main_type
|
|
|
|
/* Définition des règles de grammaire */
|
|
%%
|
|
|
|
main_type:
|
|
| ty EOF { $1 }
|
|
|
|
ty:
|
|
| LPAREN ty RPAREN { $2 }
|
|
| ty RARROW ty { TImpl ($1, $3) }
|
|
| TYPE_NAME { TSimple $1 }
|
|
| TILDE ty { TImpl ($2, TFalse) }
|
|
| FALSE { TFalse }
|