Стандартный формат для конкретных и абстрактных синтаксических деревьев - PullRequest
6 голосов
/ 17 февраля 2009

У меня есть идея для хобби-проекта, который выполняет некоторый анализ кода и манипуляции. Этот проект потребует как конкретных, так и абстрактных синтаксических деревьев данного исходного файла. Кроме того, двунаправленные ссылки между двумя деревьями будут полезны. Я хотел бы избежать работы по расшифровке грамматики для создания моего собственного лексера и парсера.

Существует ли стандартный формат для описания конкретных или абстрактных синтаксических деревьев? Поддерживают ли какие-либо широко используемые цепочки инструментов вывод в эти форматы?

Я не имею в виду конкретный целевой язык программирования. Любой популярный подойдет для прототипа, но я бы предпочел тот, который я хорошо знаю: Python, C #, Javascript или C / C ++.

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

Спасибо!

Ответы [ 3 ]

4 голосов
/ 21 июня 2009

Исследовательское сообщество решило, что обмен графиками - это то, что нужно делать при перемещении информации из одного инструмента анализа программ в другой. Смотри http://www.gupro.de/GXL

Совсем недавно OMG определила стандарт для обмена абстрактными синтаксическими деревьями. Смотри http://www.omg.org/spec/ASTM/1.0/Beta1/

Эта проблема, кажется, решается снова и снова. Есть полдюжины предложений по «инструментальной шине», сделанных за эти годы это все решило, и никто не догонял индустрию. Проблема в том, что а) легко представлять АСТ, используя любой вид вложенных обозначений [круглые скобки, такие как LISP, как XML, ...] чтобы люди могли легко найти собственное решение, и б) для одного инструмента для обмена АСТ с другим, они оба должны по существу согласиться с тем, что означают узлы AST; но большинство АСТ довольно случайно получены из конкретного грамматика / технология синтаксического анализа, используемая каждым инструментом, и есть почти всегда разногласия по этому поводу между инструментами. Итак, я видел очень мало инструментов, которые обмениваются AST значимым образом.

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

Я работаю над профессиональным инструментом для управления программами . Если мы распечатать AST, мы делаем выше. В основном индивидуальный AST слишком сложны для практического применения, таким образом, мы почти никогда не распечатываем весь AST, в лучшем случае только узел и несколько детей глубоко. Наш инструмент не обменивается АСТ с кем-либо (см. Выше причины :), но делает только прекрасно встраивая его в память, делая с ним невероятные вещи по причинам анализа или трансформации, а затем либо просто удалив его (не нужно никуда отправлять) или восстановление исходного языка текста из дерева. [Последнее означает, что вам нужен антиразбор или "prettyprinting" технология]

3 голосов
/ 17 февраля 2009

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

Это имеет отвратительные накладные расходы (в инфраструктуре, такой как Eclipse UML2 / EMF), но наша цель в любом случае использовать высокоуровневые инструменты для разработки на основе моделей (MDD, MDA), поэтому мы решили использовать ее на каждом уровне.

Я думаю, что один из наших студентов когда-то играл с OpenArchitectureWare и ему удалось автоматически получить изменения из сгенерированного редактора на основе Eclipse в синтаксическое дерево (не связанное с моделью UML выше), но не знаю подробностей об этом.

Возможно, вы захотите взглянуть на ANTLR древовидную грамматику.

1 голос
/ 17 июля 2014

Конкретные стандарты являются ожиданием, в то время как более универсальные стандарты также могут быть уместными. Ира Бакстер уже упомянула GXL , и RDF также могут быть добавлены, просто для того, чтобы это требовало соответствующей онтологии и было больше ориентировано на семантику, чем на синтаксис. Еще может быть вариант для расследования.

Что касается конкретных стандартов, Ира Бакстер уже упоминала ASTM , другой, хотя он скорее нацелен на определенный тип языка программирования (логические языки), является стандартом для семантического / концептуального графа , известный как ISO ‑ IEC 24707 2007 .

Сам по себе не стандарт, а статья по этому вопросу: На пути к переносимым представлениям исходного кода с использованием XML .

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

...