public override Tree VisitDeclaration(DeclarationContext context)
        {
            FuncDeclarationContext func = context.funcDeclaration();

            if (func != null)
            {
                return(VisitFuncDeclaration(func));
            }
            StructDefContext sd = context.structDef();

            if (sd != null)
            {
                return(VisitStructDef(sd));
            }
            throw new ArgumentOutOfRangeException();
        }