feat: ajout de la grammaire correspondant aux pointeurs
This commit is contained in:
parent
ba9e13e5b8
commit
fba95515fe
|
@ -29,7 +29,9 @@
|
||||||
"denom", DENOM;
|
"denom", DENOM;
|
||||||
"true", TRUE;
|
"true", TRUE;
|
||||||
"false", FALSE;
|
"false", FALSE;
|
||||||
"return", RETURN
|
"return", RETURN;
|
||||||
|
"null", NULL;
|
||||||
|
"new", NEW;
|
||||||
];
|
];
|
||||||
fun id ->
|
fun id ->
|
||||||
match Hashtbl.find_opt kws id with
|
match Hashtbl.find_opt kws id with
|
||||||
|
@ -38,10 +40,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
rule token = parse
|
rule token = parse
|
||||||
|
|
||||||
(* ignore les sauts de lignes mais les compte quand même *)
|
(* ignore les sauts de lignes mais les compte quand même *)
|
||||||
| '\n' { new_line lexbuf; token lexbuf }
|
| '\n' { new_line lexbuf; token lexbuf }
|
||||||
|
|
||||||
(* ignore les espaces et tabulations *)
|
(* ignore les espaces et tabulations *)
|
||||||
| [' ' '\t'] { token lexbuf }
|
| [' ' '\t'] { token lexbuf }
|
||||||
|
|
||||||
(* ignore les commentaires *)
|
(* ignore les commentaires *)
|
||||||
| "//"[^'\n']* { token lexbuf }
|
| "//"[^'\n']* { token lexbuf }
|
||||||
|
|
||||||
|
@ -58,15 +63,16 @@ rule token = parse
|
||||||
| "+" { PLUS }
|
| "+" { PLUS }
|
||||||
| "*" { MULT }
|
| "*" { MULT }
|
||||||
| "<" { INF }
|
| "<" { INF }
|
||||||
|
| "&" { AMP }
|
||||||
|
|
||||||
(* constantes entières *)
|
(* constantes entières *)
|
||||||
| ("-")?['0'-'9']+ as i
|
| ("-")?['0'-'9']+ as i { ENTIER (int_of_string i) }
|
||||||
{ ENTIER (int_of_string i) }
|
|
||||||
(* identifiants et mots-clefs *)
|
(* identifiants et mots-clefs *)
|
||||||
| ['a'-'z'](['A'-'Z''a'-'z''0'-'9']|"-"|"_")* as n
|
| ['a'-'z'](['A'-'Z''a'-'z''0'-'9']|"-"|"_")* as n { ident n }
|
||||||
{ ident n }
|
|
||||||
|
|
||||||
(* fin de lecture *)
|
(* fin de lecture *)
|
||||||
| eof { EOF }
|
| eof { EOF }
|
||||||
|
|
||||||
(* entrée non reconnue *)
|
(* entrée non reconnue *)
|
||||||
| _ { error lexbuf }
|
| _ { error lexbuf }
|
||||||
|
|
90
src/out.tam
90
src/out.tam
|
@ -1,90 +0,0 @@
|
||||||
; fichiersRat/src-rat-tam-test/testfun5.rat
|
|
||||||
JUMP main
|
|
||||||
|
|
||||||
pgcd
|
|
||||||
LOADL 0
|
|
||||||
LOAD (1) -2[LB]
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
boucle
|
|
||||||
LOAD (1) 5[LB]
|
|
||||||
JUMPIF (0) fin
|
|
||||||
LOAD (1) 4[LB]
|
|
||||||
LOAD (1) 5 [LB]
|
|
||||||
SUBR IMod
|
|
||||||
STORE (1) 3[LB]
|
|
||||||
LOAD (1) 5[LB]
|
|
||||||
STORE (1) 4[LB]
|
|
||||||
LOAD (1) 3[LB]
|
|
||||||
STORE(1) 5[LB]
|
|
||||||
JUMP boucle
|
|
||||||
fin
|
|
||||||
LOAD (1) 4[LB]
|
|
||||||
RETURN (1) 2
|
|
||||||
|
|
||||||
norm
|
|
||||||
LOAD (1) -2[LB]
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
CALL (LB) pgcd
|
|
||||||
LOAD (1) -2[LB]
|
|
||||||
LOAD (1) 3[LB]
|
|
||||||
SUBR IDiv
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
LOAD (1) 3[LB]
|
|
||||||
SUBR IDiv
|
|
||||||
RETURN (2) 2
|
|
||||||
|
|
||||||
ROut
|
|
||||||
LOADL '['
|
|
||||||
SUBR COut
|
|
||||||
LOAD (1) -2[LB]
|
|
||||||
SUBR IOut
|
|
||||||
LOADL '/'
|
|
||||||
SUBR COut
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
SUBR IOut
|
|
||||||
LOADL ']'
|
|
||||||
SUBR COut
|
|
||||||
RETURN (0) 2
|
|
||||||
|
|
||||||
RAdd
|
|
||||||
LOAD (1) -4[LB]
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
SUBR IMul
|
|
||||||
LOAD (1) -2[LB]
|
|
||||||
LOAD (1) -3[LB]
|
|
||||||
SUBR IMul
|
|
||||||
SUBR IAdd
|
|
||||||
LOAD (1) -3[LB]
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
SUBR IMul
|
|
||||||
CALL (ST) norm
|
|
||||||
RETURN (2) 4
|
|
||||||
|
|
||||||
RMul
|
|
||||||
LOAD (1) -4[LB]
|
|
||||||
LOAD (1) -2[LB]
|
|
||||||
SUBR IMul
|
|
||||||
LOAD (1) -3[LB]
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
SUBR IMul
|
|
||||||
CALL (ST) norm
|
|
||||||
RETURN (2) 4
|
|
||||||
|
|
||||||
f1
|
|
||||||
PUSH 1
|
|
||||||
LOAD (1) -1[LB]
|
|
||||||
STORE (1) 3[LB]
|
|
||||||
POP (1) 1
|
|
||||||
LOADL ''
|
|
||||||
RETURN (0) 1
|
|
||||||
|
|
||||||
main
|
|
||||||
PUSH 1
|
|
||||||
LOADL 13
|
|
||||||
CALL (ST) f1
|
|
||||||
STORE (1) 0[SB]
|
|
||||||
LOAD (1) 0[SB]
|
|
||||||
SUBR IOut
|
|
||||||
POP (0) 1
|
|
||||||
|
|
||||||
HALT
|
|
|
@ -1,12 +1,10 @@
|
||||||
/* Imports. */
|
/* Imports. */
|
||||||
|
|
||||||
%{
|
%{
|
||||||
|
|
||||||
open Type
|
open Type
|
||||||
open Ast.AstSyntax
|
open Ast.AstSyntax
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
||||||
%token <int> ENTIER
|
%token <int> ENTIER
|
||||||
%token <string> ID
|
%token <string> ID
|
||||||
%token RETURN
|
%token RETURN
|
||||||
|
@ -37,6 +35,10 @@ open Ast.AstSyntax
|
||||||
%token INF
|
%token INF
|
||||||
%token EOF
|
%token EOF
|
||||||
|
|
||||||
|
%token NULL
|
||||||
|
%token NEW
|
||||||
|
%token AMP
|
||||||
|
|
||||||
(* Type de l'attribut synthétisé des non-terminaux *)
|
(* Type de l'attribut synthétisé des non-terminaux *)
|
||||||
%type <programme> prog
|
%type <programme> prog
|
||||||
%type <instruction list> bloc
|
%type <instruction list> bloc
|
||||||
|
@ -75,6 +77,7 @@ i :
|
||||||
| IF exp=e li1=bloc ELSE li2=bloc {Conditionnelle (exp,li1,li2)}
|
| IF exp=e li1=bloc ELSE li2=bloc {Conditionnelle (exp,li1,li2)}
|
||||||
| WHILE exp=e li=bloc {TantQue (exp,li)}
|
| WHILE exp=e li=bloc {TantQue (exp,li)}
|
||||||
| RETURN exp=e PV {Retour (exp)}
|
| RETURN exp=e PV {Retour (exp)}
|
||||||
|
| a1=a EQUAL exp=e1 {Affectation(Deref(a1), e1)}
|
||||||
|
|
||||||
dp :
|
dp :
|
||||||
| {[]}
|
| {[]}
|
||||||
|
@ -84,11 +87,11 @@ typ :
|
||||||
| BOOL {Bool}
|
| BOOL {Bool}
|
||||||
| INT {Int}
|
| INT {Int}
|
||||||
| RAT {Rat}
|
| RAT {Rat}
|
||||||
|
| t1=typ MULT {Deref t1}
|
||||||
|
|
||||||
e :
|
e :
|
||||||
| CALL n=ID PO lp=cp PF {AppelFonction (n,lp)}
|
| CALL n=ID PO lp=cp PF {AppelFonction (n,lp)}
|
||||||
| CO e1=e SLASH e2=e CF {Binaire(Fraction,e1,e2)}
|
| CO e1=e SLASH e2=e CF {Binaire(Fraction,e1,e2)}
|
||||||
| n=ID {Ident n}
|
|
||||||
| TRUE {Booleen true}
|
| TRUE {Booleen true}
|
||||||
| FALSE {Booleen false}
|
| FALSE {Booleen false}
|
||||||
| e=ENTIER {Entier e}
|
| e=ENTIER {Entier e}
|
||||||
|
@ -99,8 +102,15 @@ e :
|
||||||
| PO e1=e EQUAL e2=e PF {Binaire (Equ,e1,e2)}
|
| PO e1=e EQUAL e2=e PF {Binaire (Equ,e1,e2)}
|
||||||
| PO e1=e INF e2=e PF {Binaire (Inf,e1,e2)}
|
| PO e1=e INF e2=e PF {Binaire (Inf,e1,e2)}
|
||||||
| PO exp=e PF {exp}
|
| PO exp=e PF {exp}
|
||||||
|
| a1=a {Affectable a1}
|
||||||
|
| NULL { ??? }
|
||||||
|
| PO NEW t1=typ PF { ??? }
|
||||||
|
| AMP n=ID { Deref n }
|
||||||
|
|
||||||
cp :
|
cp :
|
||||||
| {[]}
|
| {[]}
|
||||||
| e1=e le=cp {e1::le}
|
| e1=e le=cp {e1::le}
|
||||||
|
|
||||||
|
a :
|
||||||
|
| n=ID {Ident n}
|
||||||
|
| PO MULT a1=a PF {Deref a1}
|
Loading…
Reference in a new issue