/// <summary>
 /// rule_conditions :
 ///       key LEFT_PAREN arguments? RIGHT_PAREN
 ///     | NOT rule_conditions
 ///     | rule_conditions AND rule_conditions
 ///     | rule_conditions OR rule_conditions
 ///     | LEFT_PAREN rule_conditions RIGHT_PAREN
 ///     ;
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 public override object VisitRule_conditions([NotNull] WorkflowParser.Rule_conditionsContext context)
 {
     return(base.VisitRule_conditions(context));
 }
 /// <summary>
 /// Visit a parse tree produced by <see cref="WorkflowParser.rule_conditions"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitRule_conditions([NotNull] WorkflowParser.Rule_conditionsContext context)
 {
     return(VisitChildren(context));
 }
Beispiel #3
0
        /// <summary>
        /// rule_conditions :
        ///       key LEFT_PAREN arguments? RIGHT_PAREN
        ///     | NOT rule_conditions
        ///     | rule_conditions AND rule_conditions
        ///     | rule_conditions OR rule_conditions
        ///     | LEFT_PAREN rule_conditions RIGHT_PAREN
        ///     ;
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override object VisitRule_conditions([NotNull] WorkflowParser.Rule_conditionsContext context)
        {
            ExpressionModel result = null;
            var             key    = context.key();

            if (key != null)
            {
                var k  = (string)VisitKey(key);
                var r1 = new RuleExpressionModel()
                {
                    Key       = k,
                    Reference = ResolveRule(k),
                };

                var args = context.arguments();
                if (args != null)
                {
                    var arguments = (List <(string, string)>)VisitArguments(args);
                    foreach (var argument in arguments)
                    {
                        r1.Arguments.Add(argument.Item1, argument.Item2);
                    }
                }

                result = r1;
            }

            else if (context.NOT() != null)
            {
                result = new NotExpressionModel()
                {
                    Expression = (ExpressionModel)VisitRule_conditions(context.rule_conditions()[0])
                }
            }
            ;

            else if (context.AND() != null)
            {
                result = new BinaryExpressionModel()
                {
                    Left     = (ExpressionModel)VisitRule_conditions(context.rule_conditions()[0]),
                    Operator = "AND",
                    Right    = (ExpressionModel)VisitRule_conditions(context.rule_conditions()[1])
                }
            }
            ;

            else if (context.OR() != null)
            {
                result = new BinaryExpressionModel()
                {
                    Left     = (ExpressionModel)VisitRule_conditions(context.rule_conditions()[0]),
                    Operator = "OR",
                    Right    = (ExpressionModel)VisitRule_conditions(context.rule_conditions()[1])
                }
            }
            ;

            else if (context.LEFT_PAREN() != null && context.RIGHT_PAREN() != null)
            {
                result = (ExpressionModel)VisitRule_conditions(context.rule_conditions()[0]);
            }

            return(result);
        }