public override ExecutionContext VisitDecouper(Cosmos.DecouperContext context)
        {
            //split detected
            if (context.separateur != null)
            {
                var source    = expressionVisitor.Visit(context.source);
                var separator = expressionVisitor.Visit(context.separateur);

                if (source != null && separator != null)
                {
                    var split = source.ToString().Split(separator.ToString());
                    for (var index = 0; index < split.Length; index++)
                    {
                        var part = split[index];

                        //Allocate a special variable for result
                        var variable = $"##decoupage.{index + 1}".AsCosmosVariable(part.AsCosmosString());
                        parser.Variables[variable.Name] = variable;
                    }
                }
                else
                {
                    throw new WrongTypeException("Un découpage doit être réalisé sur des caractères");
                }
            }
            return(null);
        }
 /// <summary>
 /// Visit a parse tree produced by <see cref="Cosmos.decouper"/>.
 /// <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 VisitDecouper([NotNull] Cosmos.DecouperContext context)
 {
     return(VisitChildren(context));
 }
 /// <summary>
 /// Exit a parse tree produced by <see cref="Cosmos.decouper"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitDecouper([NotNull] Cosmos.DecouperContext context)
 {
 }