is there a segmentation fault
Rule *parse_file(FILE *fp) {
    // Implement this function and remove the stubbed return statement below.
    char *line;
    Rule *head = NULL;
    int first_rule = 1;
    int first_action = 1;
    Rule *new_rule;

    // For reading file lines
    while ((line = fgets(line, MAXLINE, fp)) != NULL) {
        if (is_comment_or_empty(line) == 0) {
            if (line[0] == '\t') {
                Action *new_action = add_action_line(line);
                if (first_action == 1) {
                    new_rule->actions = new_action;
                    first_action = 0;
                } else {
                    add_action(new_rule->actions, new_action);
                }
            } else {
                first_action = 1;
                new_rule = add_target_line(line, head);
                if (first_rule == 1) {
                    head = new_rule;
                    first_rule = 0;
                } else {
                    add_rule(head, new_rule);
                }
            }
        }
    }
    return head;
}