transform length = struct { .len <- uint8; }; transform pascal_string = struct { <- length; .string <- ascii <- known_length(.len); }; transform u32(little_endian) = if (little_endian) { uint32le } else { uint32be }; transform item(little_endian, len) = struct { .type <- u32(little_endian); .name <- pascal_string; switch (.type) { 3: { .val <- u32(little_endian); }; 14: { .text <- ascii <- known_length(len); }; else: { .unknown <- known_length(len); }; } }; transform main() = struct { .first_item <- item(true, 3); .second_item <- item(false, 4); };