though I'm still not quite sure I understand why this is a problem...
{
sprintf "program[%s]" $1
}
{
sprintf "program[%s]" $1
}
| ID LBRACK exp RBRACK OF exp
{
let type_id = $1 in
| ID LBRACK exp RBRACK OF exp
{
let type_id = $1 in
- let exp_1 = $3 in
- let exp_2 = $6 in
- sprintf "array[type[%s], size[%s], val[%s]]" type_id exp_1 exp_2
+ let number_of_elements = $3 in
+ let initial_value = $6 in
+ sprintf
+ "array[type[%s], size[%s], val[%s]]"
+ type_id number_of_elements initial_value
}
| ID LBRACE rec_field_assignments RBRACE
{
}
| ID LBRACE rec_field_assignments RBRACE
{
(* Perhaps "void"? *)
"unit[]"
}
(* Perhaps "void"? *)
"unit[]"
}
rec_field_assignments:
| ID EQ exp
rec_field_assignments:
| ID EQ exp
let rec_field_assignments = $5 in
sprintf "%S = %s, %s" id exp rec_field_assignments
}
let rec_field_assignments = $5 in
sprintf "%S = %s, %s" id exp rec_field_assignments
}
+ let exp = $1 in
+ sprintf "%s" exp
+ let exp = $1 in
+ let exps = $3 in
+ sprintf "%s; %s" exp exps
{
sprintf "%s %s" $1 $2
}
{
sprintf "%s %s" $1 $2
}
"fundec[%s, tyfields[%s], type_id[%s], exp[%s]]"
id tyfields type_id exp
}
"fundec[%s, tyfields[%s], type_id[%s], exp[%s]]"
id tyfields type_id exp
}
let tyfields = $5 in
sprintf "%s, %s" tyfield tyfields
}
let tyfields = $5 in
sprintf "%s, %s" tyfield tyfields
}
{
sprintf "%s, %s" $1 $3
}
{
sprintf "%s, %s" $1 $3
}
| LE {"<="}
| AND {"&"}
| OR {"|"}
| LE {"<="}
| AND {"&"}
| OR {"|"}
- sprintf "lvalue[%s]" id
+ let part = $2 in
+ sprintf "lvalue[%s, part[%s]]" id part
+ ;
+
+lvalue_part:
+ | {"epsilon[]"}
+ | lvalue_subscript {$1}
+ | lvalue_field_access {$1}
+ ;
+
+lvalue_subscript:
+ | LBRACK exp RBRACK
- let record = $1 in
- let field = $3 in
- sprintf "get_record_field[%s, %s]" record field
+ let exp = $2 in
+ sprintf "subscript[%s]" exp
- | lvalue LBRACK exp RBRACK
+ ;
+
+lvalue_field_access:
+ | DOT ID
- let array = $1 in
- let subscript = $3 in
- sprintf "get_array_subscript[%s, %s]" array subscript
+ let field = $2 in
+ sprintf "field_access[%s]" field