处理语言中结构体和数组互相嵌套的情况,使用OCaml十分的方便,代码如下:
let rec print_struct p (name, fld) str_nid structs =
let rec print_fields = function
| Fnil -> ()
| Fcons(id, ty, rem) ->
match ty with
| Tarray(aid, t, n) ->
print_array p aid str_nid t n structs
| Tstruct (tid,fld) ->
print_struct p (tid, fld) (str_nid^"."^structname) structs
| _ ->
print_fields rem
in
print_fields fld
and print_array p id name tt n structoffset =
match tt with
| Tstruct (tid,fld) ->
print_struct p (tid, fld) name structoffset; | Tarray(aid, t, n) ->
print_array p aid (name ^ "[" ^(string_of_int i) ^"]") t n structoffset
| _ ->
fprintf p " "
;;
print_struct和print_array两个函数相互嵌套调用。