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()); }