void print_plops( PlOperator *plop ) { PlOperator *i_plop; int count = 0; if ( !plop ) { printf("none\n"); } for ( i_plop = plop; i_plop!=NULL; i_plop = i_plop->next ) { printf("\nOPERATOR "); printf("%s", i_plop->name); printf("\nparameters: (%d real)\n", i_plop->number_of_real_params); print_FactList ( i_plop->params, "\n", " : "); printf("\n\npreconditions:\n"); print_PlNode(i_plop->preconds, 0); printf("effects:\n"); print_PlNode(i_plop->effects, 0); printf("\n-----\n"); count++; } printf("\nAnzahl der Operatoren: %d\n", count); }
Bool make_strips_domain( void ) { PlOperator *i; FactList *ff; if ( !make_conjunction_of_atoms( &gorig_initial_facts ) ) { printf("\nillegal initial state"); return FALSE; } if ( !make_conjunction_of_atoms( &gorig_goal_facts ) ) { printf("\nillegal goal state"); return FALSE; } for ( i = gloaded_ops; i; i = i->next ) { if ( !make_conjunction_of_atoms( &(i->preconds) ) ) { printf("\nop %s has illegal precondition", i->name); return FALSE; } if ( !make_conjunction_of_literals( &(i->effects) ) ) { printf("\nop %s has illegal effects", i->name); return FALSE; } } if ( gcmd_line.display_info == 101 ) { printf("\nfinal STRIPS representation is:\n"); printf("\nobjects:"); for ( ff = gorig_constant_list; ff; ff = ff->next ) { printf("\n%s : %s", ff->item->item, ff->item->next->item); } printf("\n\ninitial state:\n"); print_PlNode( gorig_initial_facts, 0 ); printf("\n\ngoal state:\n"); print_PlNode( gorig_goal_facts, 0 ); printf("\n\nops:"); print_plops( gloaded_ops ); } return TRUE; }
Bool make_adl_domain( void ) { PlOperator *i; FactList *ff; int j; if ( gcmd_line.display_info == 101 ) { printf("\noriginal problem parsing is:\n"); printf("\nobjects:"); for ( ff = gorig_constant_list; ff; ff = ff->next ) { printf("\n%s : %s", ff->item->item, ff->item->next->item); } printf("\n\ninitial state:\n"); print_PlNode( gorig_initial_facts, 0 ); printf("\n\ngoal state:\n"); print_PlNode( gorig_goal_facts, 0 ); printf("\n\nops:"); print_plops( gloaded_ops ); } if ( !make_initial_conjunction( &gorig_initial_facts ) ) { printf("\nillegal initial state"); return FALSE; } else { if ( gcmd_line.display_info == 101 ) { printf("\n\norig parse split up initial state, facts:\n"); print_PlNode( gorig_initial_facts, 0 ); printf("\n\norig parse split up initial state, ors:\n"); for ( j = 0; j < gnum_orig_initial_ors; j++ ) { print_PlNode( gorig_initial_ors[j], 0 ); } printf("\n\norig parse split up initial state, oneofs:\n"); for ( j = 0; j < gnum_orig_initial_oneofs; j++ ) { print_PlNode( gorig_initial_oneofs[j], 0 ); } printf("\n\norig parse split up initial state, multis:\n"); for ( j = 0; j < gnum_orig_initial_multis; j++ ) { print_PlNode( gorig_initial_multis[j], 0 ); } } } if ( !gorig_goal_facts ) { gorig_goal_facts = new_PlNode( TRU ); } if ( !is_wff( gorig_goal_facts ) ) { printf("\nillegal goal formula"); print_PlNode( gorig_goal_facts, 0 ); return FALSE; } for ( i = gloaded_ops; i; i = i->next ) { if ( !i->preconds ) { i->preconds = new_PlNode( TRU ); } if ( !is_wff( i->preconds ) ) { printf("\nop %s has illegal precondition", i->name); return FALSE; } if ( !make_effects( &(i->effects) ) ) { printf("\nop %s has illegal effects", i->name); return FALSE; } } if ( gcmd_line.display_info == 102 ) { printf("\nfinal ADL representation is:\n"); printf("\nobjects:"); for ( ff = gorig_constant_list; ff; ff = ff->next ) { printf("\n%s : %s", ff->item->item, ff->item->next->item); } printf("\n\ninitial state:\n"); print_PlNode( gorig_initial_facts, 0 ); printf("\ninitial state, ors:\n"); for ( j = 0; j < gnum_orig_initial_ors; j++ ) { print_PlNode( gorig_initial_ors[j], 0 ); } printf("\ninitial state, oneofs:\n"); for ( j = 0; j < gnum_orig_initial_oneofs; j++ ) { print_PlNode( gorig_initial_oneofs[j], 0 ); } printf("\ninitial state, multis:\n"); for ( j = 0; j < gnum_orig_initial_multis; j++ ) { print_PlNode( gorig_initial_multis[j], 0 ); } printf("\n\ngoal formula:\n"); print_PlNode( gorig_goal_facts, 0 ); printf("\n\nops:"); print_plops( gloaded_ops ); } return TRUE; }
void print_PlNode( PlNode *plnode, int indent ) { PlNode *i_son; if ( !plnode ) { printf("none\n"); return; } switch (plnode->connective) { case ALL: printf("ALL %s : %s\n", plnode->atom->item, plnode->atom->next->item); print_indent(indent); printf("( "); print_PlNode(plnode->sons,indent+4); print_indent(indent); printf(")\n"); break; case EX: printf("EX %s : %s\n", plnode->atom->item, plnode->atom->next->item); print_indent(indent); printf("( "); print_PlNode(plnode->sons,indent+4); print_indent(indent); printf(")\n"); break; case AND: printf("A( "); print_PlNode(plnode->sons, indent+4); if ( plnode->sons ) { for ( i_son = plnode->sons->next; i_son!=NULL; i_son = i_son->next ) { print_indent(indent); printf("AND "); print_PlNode(i_son,indent+4); } } print_indent(indent); printf(")\n"); break; case OR: printf("O( "); print_PlNode(plnode->sons, indent+4); for ( i_son = plnode->sons->next; i_son!=NULL; i_son = i_son->next ) { print_indent(indent); printf("OR "); print_PlNode(i_son,indent+4); } print_indent(indent); printf(")\n"); break; case WHEN: printf("IF "); print_PlNode(plnode->sons,indent+5); print_indent(indent); printf("THEN "); print_PlNode(plnode->sons->next,indent+5); print_indent(indent); printf("ENDIF\n"); break; case NOT: if (ATOM==plnode->sons->connective) { printf("NOT "); print_PlNode(plnode->sons,indent+4); } else { printf("NOT("); print_PlNode(plnode->sons,indent+4); print_indent(indent+3); printf(")\n"); } break; case ATOM: printf("("); print_hidden_TokenList(plnode->atom, " "); printf(")\n"); break; case TRU: printf("(TRUE)\n"); break; case FAL: printf("(FALSE)\n"); break; case COMP: switch (plnode->comp) { case LE: printf("(< "); break; case LEQ: printf("(<= "); break; case EQ: printf("(= "); break; case GEQ: printf("(>= "); break; case GE: printf("(> "); break; default: printf("\n\nillegal comp in parse tree!\n\n"); exit( 1 ); } print_ParseExpNode( plnode->lh ); print_ParseExpNode( plnode->rh ); printf(")\n"); break; case NEF: switch (plnode->neft) { case ASSIGN: printf("(assign "); break; case SCALE_UP: printf("(scale-up "); break; case SCALE_DOWN: printf("(scale-down "); break; case INCREASE: printf("(increase "); break; case DECREASE: printf("(decrease "); break; } print_ParseExpNode( plnode->lh ); print_ParseExpNode( plnode->rh ); printf(")\n"); break; default: printf("\n***** ERROR ****"); printf("\nprint_plnode: %d > Wrong Node specifier\n", plnode->connective); exit(1); } }
void print_PlNode( PlNode *plnode, int indent ) { PlNode *i_son; if ( !plnode ) { printf("none\n"); return; } switch (plnode->connective) { case ALL: printf("ALL %s : %s\n", plnode->atom->item, plnode->atom->next->item); print_indent(indent); printf("( "); print_PlNode(plnode->sons,indent+4); print_indent(indent); printf(")\n"); break; case EX: printf("EX %s : %s\n", plnode->atom->item, plnode->atom->next->item); print_indent(indent); printf("( "); print_PlNode(plnode->sons,indent+4); print_indent(indent); printf(")\n"); break; case AND: printf("A( "); print_PlNode(plnode->sons, indent+4); if ( plnode->sons ) { for ( i_son = plnode->sons->next; i_son!=NULL; i_son = i_son->next ) { print_indent(indent); printf("AND "); print_PlNode(i_son,indent+4); } } print_indent(indent); printf(")\n"); break; case OR: printf("O( "); print_PlNode(plnode->sons, indent+4); for ( i_son = plnode->sons->next; i_son!=NULL; i_son = i_son->next ) { print_indent(indent); printf("OR "); print_PlNode(i_son,indent+4); } print_indent(indent); printf(")\n"); break; case ONEOF: printf("O( "); print_PlNode(plnode->sons, indent+4); for ( i_son = plnode->sons->next; i_son!=NULL; i_son = i_son->next ) { print_indent(indent); printf("XOR "); print_PlNode(i_son,indent+4); } print_indent(indent); printf(")\n"); break; case MULTI: printf("M( "); print_PlNode(plnode->sons, indent+4); for ( i_son = plnode->sons->next; i_son!=NULL; i_son = i_son->next ) { print_indent(indent); printf("MUL "); print_PlNode(i_son,indent+4); } print_indent(indent); printf(")\n"); break; case WHEN: printf("IF (%lf) ", plnode->eff_p); print_PlNode(plnode->sons,indent+5); print_indent(indent); printf("THEN "); print_PlNode(plnode->sons->next,indent+5); print_indent(indent); printf("ENDIF\n"); break; case NOT: if (ATOM==plnode->sons->connective) { printf("NOT "); print_PlNode(plnode->sons,indent+4); } else { printf("NOT("); print_PlNode(plnode->sons,indent+4); print_indent(indent+3); printf(")\n"); } break; case UNKNOWN: printf("UNKNOWN "); print_PlNode(plnode->sons,indent+4); break; case CPT: printf("CPT ("); print_hidden_TokenList(plnode->atom, " "); printf(") %f", plnode->cpt_p); printf("\nA("); for ( i_son = plnode->sons; i_son!=NULL; i_son = i_son->next ) { print_indent(indent); printf("CPTA "); print_PlNode(i_son,indent+4); } print_indent(indent); printf(")\n"); break; case ATOM: printf("("); print_hidden_TokenList(plnode->atom, " "); printf(")\n"); break; case TRU: printf("(TRUE)\n"); break; case FAL: printf("(FALSE)\n"); break; default: printf("\n***** ERROR ****"); printf("\nprint_plnode: %d > Wrong Node specifier\n", plnode->connective); exit(1); } }