XBT_PUBLIC xbt_automaton_transition_t xbt_automaton_transition_new(xbt_automaton_t a, xbt_automaton_state_t src,
xbt_automaton_state_t dst,
xbt_automaton_exp_label_t label);
-XBT_PUBLIC xbt_automaton_exp_label_t xbt_automaton_exp_label_new(int type, ...);
+XBT_PUBLIC xbt_automaton_exp_label_t xbt_automaton_exp_label_new_or(xbt_automaton_exp_label_t left,
+ xbt_automaton_exp_label_t right);
+XBT_PUBLIC xbt_automaton_exp_label_t xbt_automaton_exp_label_new_and(xbt_automaton_exp_label_t left,
+ xbt_automaton_exp_label_t right);
+XBT_PUBLIC xbt_automaton_exp_label_t xbt_automaton_exp_label_new_not(xbt_automaton_exp_label_t exp_not);
+XBT_PUBLIC xbt_automaton_exp_label_t xbt_automaton_exp_label_new_predicat(char* p);
+XBT_PUBLIC xbt_automaton_exp_label_t xbt_automaton_exp_label_new_one(void);
XBT_PUBLIC xbt_dynar_t xbt_automaton_get_states(xbt_automaton_t a);
XBT_PUBLIC xbt_dynar_t xbt_automaton_get_transitions(xbt_automaton_t a);
XBT_PUBLIC xbt_automaton_transition_t xbt_automaton_get_transition(xbt_automaton_t a, xbt_automaton_state_t src,
return transition;
}
-xbt_automaton_exp_label_t xbt_automaton_exp_label_new(int type, ...){
+xbt_automaton_exp_label_t xbt_automaton_exp_label_new_or(xbt_automaton_exp_label_t left,
+ xbt_automaton_exp_label_t right)
+{
xbt_automaton_exp_label_t label = xbt_new0(struct xbt_automaton_exp_label, 1);
- label->type = type;
- xbt_automaton_exp_label_t left;
- xbt_automaton_exp_label_t right;
- xbt_automaton_exp_label_t exp_not;
- char *p;
- va_list ap;
- va_start(ap, type);
- switch(type){
- case 0 :
- left = va_arg(ap, xbt_automaton_exp_label_t);
- right = va_arg(ap, xbt_automaton_exp_label_t);
- label->u.or_and.left_exp = left;
- label->u.or_and.right_exp = right;
- break;
- case 1 :
- left = va_arg(ap, xbt_automaton_exp_label_t);
- right = va_arg(ap, xbt_automaton_exp_label_t);
- label->u.or_and.left_exp = left;
- label->u.or_and.right_exp = right;
- break;
- case 2 :
- exp_not = va_arg(ap, xbt_automaton_exp_label_t);
- label->u.exp_not = exp_not;
- break;
- case 3 :
- p = va_arg(ap, char*);
- label->u.predicat = xbt_strdup(p);
- break;
- case 4:
- break;
- default:
- XBT_DEBUG("Invalid type: %d", type);
- xbt_free(label);
- label = NULL;
- break;
- }
- va_end(ap);
+ label->type = AUT_OR;
+ label->u.or_and.left_exp = left;
+ label->u.or_and.right_exp = right;
+ return label;
+}
+
+xbt_automaton_exp_label_t xbt_automaton_exp_label_new_and(xbt_automaton_exp_label_t left,
+ xbt_automaton_exp_label_t right)
+{
+ xbt_automaton_exp_label_t label = xbt_new0(struct xbt_automaton_exp_label, 1);
+ label->type = AUT_AND;
+ label->u.or_and.left_exp = left;
+ label->u.or_and.right_exp = right;
+ return label;
+}
+
+xbt_automaton_exp_label_t xbt_automaton_exp_label_new_not(xbt_automaton_exp_label_t exp_not)
+{
+ xbt_automaton_exp_label_t label = xbt_new0(struct xbt_automaton_exp_label, 1);
+ label->type = AUT_NOT;
+ label->u.exp_not = exp_not;
+ return label;
+}
+
+xbt_automaton_exp_label_t xbt_automaton_exp_label_new_predicat(char* p)
+{
+ xbt_automaton_exp_label_t label = xbt_new0(struct xbt_automaton_exp_label, 1);
+ label->type = AUT_PREDICAT;
+ label->u.predicat = xbt_strdup(p);
+ return label;
+}
+
+xbt_automaton_exp_label_t xbt_automaton_exp_label_new_one(void)
+{
+ xbt_automaton_exp_label_t label = xbt_new0(struct xbt_automaton_exp_label, 1);
+ label->type = AUT_ONE;
return label;
}
}
-static xbt_automaton_exp_label_t new_label(int type, ...){
- xbt_automaton_exp_label_t label = NULL;
- xbt_automaton_exp_label_t left;
- xbt_automaton_exp_label_t right;
- xbt_automaton_exp_label_t exp_not;
- char *p;
-
- va_list ap;
- va_start(ap,type);
- switch(type){
- case 0 :
- left = va_arg(ap, xbt_automaton_exp_label_t);
- right = va_arg(ap, xbt_automaton_exp_label_t);
- label = xbt_automaton_exp_label_new(type, left, right);
- break;
- case 1 :
- left = va_arg(ap, xbt_automaton_exp_label_t);
- right = va_arg(ap, xbt_automaton_exp_label_t);
- label = xbt_automaton_exp_label_new(type, left, right);
- break;
- case 2 :
- exp_not = va_arg(ap, xbt_automaton_exp_label_t);
- label = xbt_automaton_exp_label_new(type, exp_not);
- break;
- case 3 :
- p = va_arg(ap, char*);
- label = xbt_automaton_exp_label_new(type, p);
- break;
- case 4 :
- label = xbt_automaton_exp_label_new(type);
- break;
- default:
- XBT_DEBUG("Invalid type: %d", type);
- break;
- }
- va_end(ap);
- return label;
-}
-
#include "parserPromela.tab.cacc"
void xbt_automaton_load(xbt_automaton_t a, const char *file)
case 9:
#line 69 "parserPromela.yacc" /* yacc.c:1646 */
- { (yyval.label) = new_label(0, (yyvsp[-2].label), (yyvsp[0].label)); }
+ { (yyval.label) = xbt_automaton_exp_label_new_or((yyvsp[-2].label), (yyvsp[0].label)); }
#line 1280 "parserPromela.tab.cacc" /* yacc.c:1646 */
break;
case 10:
#line 70 "parserPromela.yacc" /* yacc.c:1646 */
- { (yyval.label) = new_label(1, (yyvsp[-2].label), (yyvsp[0].label)); }
+ { (yyval.label) = xbt_automaton_exp_label_new_and((yyvsp[-2].label), (yyvsp[0].label)); }
#line 1286 "parserPromela.tab.cacc" /* yacc.c:1646 */
break;
case 11:
#line 71 "parserPromela.yacc" /* yacc.c:1646 */
- { (yyval.label) = new_label(2, (yyvsp[0].label)); }
+ { (yyval.label) = xbt_automaton_exp_label_new_not((yyvsp[0].label)); }
#line 1292 "parserPromela.tab.cacc" /* yacc.c:1646 */
break;
case 12:
#line 72 "parserPromela.yacc" /* yacc.c:1646 */
- { (yyval.label) = new_label(4); }
+ { (yyval.label) = xbt_automaton_exp_label_new_one(); }
#line 1298 "parserPromela.tab.cacc" /* yacc.c:1646 */
break;
case 13:
#line 73 "parserPromela.yacc" /* yacc.c:1646 */
- { (yyval.label) = new_label(3, (yyvsp[0].string)); }
+ { (yyval.label) = xbt_automaton_exp_label_new_predicat((yyvsp[0].string)); }
#line 1304 "parserPromela.tab.cacc" /* yacc.c:1646 */
break;
;
exp : LEFT_PAR exp RIGHT_PAR { $$ = $2; }
- | exp OR exp { $$ = new_label(0, $1, $3); }
- | exp AND exp { $$ = new_label(1, $1, $3); }
- | NOT exp { $$ = new_label(2, $2); }
- | CASE_TRUE { $$ = new_label(4); }
- | ID { $$ = new_label(3, $1); }
+ | exp OR exp { $$ = xbt_automaton_exp_label_new_or($1, $3); }
+ | exp AND exp { $$ = xbt_automaton_exp_label_new_and($1, $3); }
+ | NOT exp { $$ = xbt_automaton_exp_label_new_not($2); }
+ | CASE_TRUE { $$ = xbt_automaton_exp_label_new_one(); }
+ | ID { $$ = xbt_automaton_exp_label_new_predicat($1); }
;
%%