Сериализация AST в парсинговом формате - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть DSL с внешним интерфейсом Java, и я хотел бы сериализовать AST, который я получаю во входной части, в каком-то легко разбираемом формате, чтобы упростить написание серверной части, которая генерирует код в другомязыки программирования.Есть ли что-нибудь лучше, чем XML для этой цели?

1 Ответ

4 голосов
/ 26 апреля 2011

XML производит много текста, и AST могут быть феноменально большими.(Я создаю парсеры и) наши парсеры будут производить XML, потому что наши клиенты требовали его ... но никто из них на самом деле не использует его.ИМХО, лучше разработать собственный формат, который плотно кодирует ваше дерево, чтобы избежать времени, которое требуется для чтения и записи AST.Например, вы можете согласиться на:

( nodetype =value childnodes )

, где () - круглые скобки, с (открывая узел дерева, тип узла - целое число, представляющее тип узла [возможно, даже в формате с высоким основанием, чтобы минимизироватьчисло символов], = присутствует, если узел несет значение [вам не нужен знак =, если вы думаете об этом], и значение предоставляется. Дочерние узлы вставляются перед закрытием);если они присутствуют, они, очевидно, начинаются с левой пары.Пробелы не нужны!Если вам действительно нужно читать , то иногда вы можете создать простой тупой инструмент для отступа в скобках, когда вам нужно его увидеть.

[Старые таймеры распознают это как S-выражения LISPи это существовало с конца 1950-х годов как древовидная кодировка].

(Мы вообще этого избегаем, потому что чтение и запись деревьев обходятся дорого, независимо от того, как вы это делаете, и часто просто проще и болееэффективно завершить обработку дерева, которое у вас в памяти, и просто выплюнуть окончательный ответ).

...