add comments
This commit is contained in:
parent
f657f8d9d7
commit
41664b64bd
1 changed files with 25 additions and 1 deletions
26
parser.mly
26
parser.mly
|
@ -10,7 +10,8 @@
|
||||||
%token Lend Lassign Lsc Lreturn
|
%token Lend Lassign Lsc Lreturn
|
||||||
%token Ladd Lsub Lmul Ldiv
|
%token Ladd Lsub Lmul Ldiv
|
||||||
|
|
||||||
%left Ladd Lsub Lmul Ldiv
|
%left Ladd Lsub
|
||||||
|
%left Lmul Ldiv
|
||||||
|
|
||||||
%start prog
|
%start prog
|
||||||
|
|
||||||
|
@ -19,42 +20,65 @@
|
||||||
%%
|
%%
|
||||||
|
|
||||||
prog:
|
prog:
|
||||||
|
/* Fin de programme */
|
||||||
| Lend { [] }
|
| Lend { [] }
|
||||||
|
|
||||||
|
/* instr; */
|
||||||
| i = instr ; Lsc ; b = prog { i @ b }
|
| i = instr ; Lsc ; b = prog { i @ b }
|
||||||
;
|
;
|
||||||
|
|
||||||
instr:
|
instr:
|
||||||
|
/* return x */
|
||||||
| Lreturn ; e = expr { [ Return { expr = e ; pos = $startpos } ] }
|
| Lreturn ; e = expr { [ Return { expr = e ; pos = $startpos } ] }
|
||||||
|
|
||||||
|
/* type v */
|
||||||
| t = Ltype ; v = Lvar {
|
| t = Ltype ; v = Lvar {
|
||||||
[ Decl { name = v ; type_t = t ; pos = $startpos(t) } ]
|
[ Decl { name = v ; type_t = t ; pos = $startpos(t) } ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* type v = e */
|
||||||
| t = Ltype ; v = Lvar ; Lassign ; e = expr
|
| t = Ltype ; v = Lvar ; Lassign ; e = expr
|
||||||
{ [ Decl { name = v ; type_t = t ; pos = $startpos(t) }
|
{ [ Decl { name = v ; type_t = t ; pos = $startpos(t) }
|
||||||
; Assign { var = v ; expr = e ; pos = $startpos(v) } ]
|
; Assign { var = v ; expr = e ; pos = $startpos(v) } ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* v = e */
|
||||||
| v = Lvar ; Lassign ; e = expr {
|
| v = Lvar ; Lassign ; e = expr {
|
||||||
[ Assign { var = v ; expr = e ; pos = $startpos($2) } ]
|
[ Assign { var = v ; expr = e ; pos = $startpos($2) } ]
|
||||||
}
|
}
|
||||||
|
|
||||||
expr:
|
expr:
|
||||||
|
/* int */
|
||||||
| n = Lint {
|
| n = Lint {
|
||||||
Val { value = Int (n) ; pos = $startpos(n) }
|
Val { value = Int (n) ; pos = $startpos(n) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* bool */
|
||||||
| b = Lbool {
|
| b = Lbool {
|
||||||
Val { value = Bool (b) ; pos = $startpos(b) }
|
Val { value = Bool (b) ; pos = $startpos(b) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Variable */
|
||||||
| v = Lvar {
|
| v = Lvar {
|
||||||
Var { name = v ; pos = $startpos(v) }
|
Var { name = v ; pos = $startpos(v) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* e + e */
|
||||||
| a = expr ; Ladd ; b = expr {
|
| a = expr ; Ladd ; b = expr {
|
||||||
Call { func = "%add" ; args = [ a ; b ] ; pos = $startpos($2) }
|
Call { func = "%add" ; args = [ a ; b ] ; pos = $startpos($2) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* e - e */
|
||||||
| a = expr ; Lsub ; b = expr {
|
| a = expr ; Lsub ; b = expr {
|
||||||
Call { func = "%sub" ; args = [ a ; b ] ; pos = $startpos($2) }
|
Call { func = "%sub" ; args = [ a ; b ] ; pos = $startpos($2) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* e * e */
|
||||||
| a = expr ; Lmul ; b = expr {
|
| a = expr ; Lmul ; b = expr {
|
||||||
Call { func = "%mul" ; args = [ a ; b ] ; pos = $startpos($2) }
|
Call { func = "%mul" ; args = [ a ; b ] ; pos = $startpos($2) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* e / e */
|
||||||
| a = expr ; Ldiv ; b = expr {
|
| a = expr ; Ldiv ; b = expr {
|
||||||
Call { func = "%div" ; args = [ a ; b ] ; pos = $startpos($2) }
|
Call { func = "%div" ; args = [ a ; b ] ; pos = $startpos($2) }
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue