public override string ToString()
        {
            // Json format

            StringBuilder sb = new StringBuilder();

            string tabs_lvl  = string.Concat(Enumerable.Repeat("\t", level));
            string tabs_lvl1 = tabs_lvl + "\t";

            sb.Append(tabs_lvl)
            .Append("{\r\n");
            sb.Append(tabs_lvl1)
            .Append("\"node_type\": ").Append("\"" + ASTType.ToString() + "\"").Append(",\r\n");

            if (AASTType.Type != VarType.ERAType.NO_TYPE || Program.config.ExtendedSemanticMessages)
            {
                sb.Append(tabs_lvl1)
                .Append("\"var_type\": ").Append("\"" + AASTType.ToString() + "\"").Append(",\r\n");
            }

            if (AASTValue != 0 || Program.config.ExtendedSemanticMessages)
            {
                sb.Append(tabs_lvl1)
                .Append("\"var_value\": ").Append("\"" + AASTValue.ToString() + "\"").Append(",\r\n");
            }

            if (BlockPosition != 0 || Program.config.ExtendedSemanticMessages)
            {
                sb.Append(tabs_lvl1)
                .Append("\"block_position\": ").Append("\"" + BlockPosition.ToString() + "\"").Append(",\r\n");
            }

            if (Context != null)
            {
                Context.Level = level + 1; // To make the output correct
                sb.Append(tabs_lvl1)
                .Append("\"context\": ");
                sb.Append("\r\n").Append(Context.ToString()).Append(",\r\n");
            }

            sb.Append(tabs_lvl1)
            .Append("\"token\": ").Append("\"" + Token.Value + "\"").Append(",\r\n");
            sb.Append(tabs_lvl1)
            .Append("\"children\": [");

            if (Children.Count > 0)
            {
                foreach (ASTNode child in Children)
                {
                    sb.Append("\r\n").Append(child?.ToString()).Append(',');
                }
                sb.Remove(sb.Length - 1, 1); // Remove last ','
                sb.Append("\r\n");
                sb.Append(tabs_lvl1)
                .Append("]\r\n");
            }
            else
            {
                sb.Append("]\r\n");
            }

            sb.Append(tabs_lvl)
            .Append('}');

            return(sb.ToString());
        }