if_cmd : KW_IF fgl_expr_c atline KW_THEN commands_as_list { add_feature("IF"); } atline op_else atline END_IF { int a; //char wt; int val_last; if_conds x; $$=$8; x.conditions.conditions_len=$8->truths.conditions.conditions_len; x.conditions.conditions_val=$8->truths.conditions.conditions_val; if ($8->truths.conditions.conditions_val==0) { $$->truths.conditions.conditions_val=malloc(sizeof($$->truths.conditions.conditions_val[0]) ); $$->truths.conditions.conditions_len=1; $$->truths.conditions.conditions_val[0].test_expr=chk_expr($2); $$->truths.conditions.conditions_val[0].lineno=$3; $$->truths.conditions.conditions_val[0].whentrue=$5; // setup the first one... } else{ val_last=$8->truths.conditions.conditions_len; $$->truths.conditions.conditions_val=malloc(sizeof($$->truths.conditions.conditions_val[0]) * ($8->truths.conditions.conditions_len+1)); $$->truths.conditions.conditions_val[0].test_expr=chk_expr($2); $$->truths.conditions.conditions_val[0].lineno=$3; $$->truths.conditions.conditions_val[0].whentrue=$5; // setup the first one... // now copy the rest for (a=0;a$->truths.conditions.conditions_val[a+1].test_expr =x.conditions.conditions_val[a].test_expr; $$->truths.conditions.conditions_val[a+1].whentrue =x.conditions.conditions_val[a].whentrue; $$->truths.conditions.conditions_val[a+1].lineno =x.conditions.conditions_val[a].lineno; } $$->truths.conditions.conditions_len++; } set_cmdlineno($3); $$=new_if_cmd(&$$->truths, $$->whenfalse, $7,$3); } ; op_else : { $$=malloc(sizeof(struct_if_cmd)); $$->whenfalse=0; $$->truths.conditions.conditions_len=0; $$->truths.conditions.conditions_val=0; } | ELSE atline commands_as_list { $$=malloc(sizeof(struct_if_cmd)); $$->whenfalse= $3; $$->lineno= $2; $$->truths.conditions.conditions_len=0; $$->truths.conditions.conditions_val=0; } | ELIF atline fgl_expr_c KW_THEN commands_as_list op_else { $$=$6; $$->truths.conditions.conditions_len++; $$->truths.conditions.conditions_val =realloc( $$->truths.conditions.conditions_val, sizeof( $$->truths.conditions.conditions_val[0]) * $$->truths.conditions.conditions_len); $$->truths.conditions.conditions_val[$$->truths.conditions.conditions_len-1].test_expr=chk_expr($3); $$->truths.conditions.conditions_val[$$->truths.conditions.conditions_len-1].lineno=$2; $$->truths.conditions.conditions_val[$$->truths.conditions.conditions_len-1].whentrue=$5; };