FUNCTION Acyclic
(arg1 : Generic_expression; arg2 : SET [0:?] OF Generic_expression) : BOOLEAN;
LOCAL result: BOOLEAN; END_LOCAL;
IF ('GENERIC_EXPRESSION_ARM.SIMPLE_GENERIC_EXPRESSION' IN TYPEOF (arg1)) THEN RETURN (TRUE); END_IF;
IF arg1 IN arg2 THEN RETURN (FALSE); END_IF;
IF 'GENERIC_EXPRESSION_ARM.UNARY_GENERIC_EXPRESSION' IN TYPEOF (arg1) THEN RETURN (Acyclic(arg1\Unary_generic_expression.operand,arg2+[arg1])); END_IF;
IF 'GENERIC_EXPRESSION_ARM.BINARY_GENERIC_EXPRESSION' IN TYPEOF (arg1) THEN RETURN (Acyclic(arg1\Binary_generic_expression.operands[1],arg2+[arg1]) AND Acyclic(arg1\Binary_generic_expression.operands[2],arg2+[arg1])); END_IF;
IF 'GENERIC_EXPRESSION_ARM.MULTIPLE_ARITY_GENERIC_EXPRESSION' IN TYPEOF (arg1) THEN result := TRUE; REPEAT i := 1 TO SIZEOF (arg1\Multiple_arity_generic_expression.operands); result := result AND Acyclic(arg1\Multiple_arity_generic_expression.operands[i], arg2+[arg1]); END_REPEAT;
RETURN (result); END_IF; END_FUNCTION; -- Acyclic
|