public override object VisitDeclareExpression([NotNull] TinyScriptParser.DeclareExpressionContext context)
        {
            var type = GetDeclType(context, context.basicType().GetText());

            foreach (var assign in context.declarators().assign())
            {
                var      name = assign.Identifier().GetText();
                Variable obj;
                if (_variables.TryGetValue(name, out obj))
                {
                    throw context.Exception("Variable [{0}] already defined.", name);
                }
                _variables.Add(name, new Variable {
                    Type = type
                });
            }
            return(VisitDeclarators(context.declarators()));
        }
        public override object VisitDeclareExpression([NotNull] TinyScriptParser.DeclareExpressionContext context)
        {
            var assigns = context.declarators().assign();

            foreach (var assign in assigns)
            {
                var      name = assign.Identifier().GetText();
                VarValue obj;
                if (Variables.TryGetValue(name, out obj))
                {
                    if (obj.StartIndex == assign.Start.StartIndex)
                    {
                        return(base.VisitDeclareExpression(context));
                    }
                    throw context.Exception("Variable [{0}] already defined.", name);
                }
                switch (context.basicType().GetText())
                {
                case "decimal":
                    Variables.Add(name, new VarValue(assign.Start.StopIndex, (decimal)0));
                    break;

                case "string":
                    Variables.Add(name, new VarValue(assign.Start.StopIndex, ""));
                    break;

                case "bool":
                    Variables.Add(name, new VarValue(assign.Start.StopIndex, false));
                    break;

                case "var":
                    Variables.Add(name, new VarValue(assign.Start.StopIndex, null));
                    break;
                }
            }
            return(base.VisitDeclareExpression(context));
        }
 /// <summary>
 /// Visit a parse tree produced by <see cref="TinyScriptParser.declareExpression"/>.
 /// <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 VisitDeclareExpression([NotNull] TinyScriptParser.DeclareExpressionContext context)
 {
     return(VisitChildren(context));
 }