|
|
@@ -130,13 +130,8 @@ dimlist:
|
|
|
{ Dim (name, loc $startpos(name) $endpos(name)) :: head }
|
|
|
|
|
|
fun_body:
|
|
|
- | llist(var_dec) local_fun_dec* statement* loption(return_statement)
|
|
|
- { VarDecs (List.rev $1) :: LocalFuns $2 :: ($3 @ $4) }
|
|
|
-
|
|
|
-return_statement:
|
|
|
- (* return statement: use location of return value *)
|
|
|
- | RETURN value=expr SEMICOL
|
|
|
- { [Return (value, loc $startpos(value) $endpos(value))] }
|
|
|
+ | llist(var_dec) local_fun_dec* statement*
|
|
|
+ { VarDecs (List.rev $1) :: LocalFuns $2 :: $3 }
|
|
|
|
|
|
(* function: use location of function name *)
|
|
|
local_fun_dec:
|
|
|
@@ -195,6 +190,10 @@ statement:
|
|
|
{ let loc = loc $startpos(cnt) $endpos(cnt) in
|
|
|
For (cnt, start, stop, step, Block body, loc) }
|
|
|
|
|
|
+ (* return statement: use location of return value *)
|
|
|
+ | RETURN value=expr? SEMICOL
|
|
|
+ { Return (value, loc $startpos(value) $endpos(value)) }
|
|
|
+
|
|
|
block:
|
|
|
| LBRACE stats=statement* RBRACE { stats }
|
|
|
| stat=statement { [stat] }
|