XML производит много текста, и AST могут быть феноменально большими.(Я создаю парсеры и) наши парсеры будут производить XML, потому что наши клиенты требовали его ... но никто из них на самом деле не использует его.ИМХО, лучше разработать собственный формат, который плотно кодирует ваше дерево, чтобы избежать времени, которое требуется для чтения и записи AST.Например, вы можете согласиться на:
( nodetype =value childnodes )
, где () - круглые скобки, с (открывая узел дерева, тип узла - целое число, представляющее тип узла [возможно, даже в формате с высоким основанием, чтобы минимизироватьчисло символов], = присутствует, если узел несет значение [вам не нужен знак =, если вы думаете об этом], и значение предоставляется. Дочерние узлы вставляются перед закрытием);если они присутствуют, они, очевидно, начинаются с левой пары.Пробелы не нужны!Если вам действительно нужно читать , то иногда вы можете создать простой тупой инструмент для отступа в скобках, когда вам нужно его увидеть.
[Старые таймеры распознают это как S-выражения LISPи это существовало с конца 1950-х годов как древовидная кодировка].
(Мы вообще этого избегаем, потому что чтение и запись деревьев обходятся дорого, независимо от того, как вы это делаете, и часто просто проще и болееэффективно завершить обработку дерева, которое у вас в памяти, и просто выплюнуть окончательный ответ).