AST строители для Java? - PullRequest
       7

AST строители для Java?

2 голосов
/ 06 февраля 2012

Я строю дерево AST вручную, чтобы использовать его с моим приложением. В настоящее время у меня много данных в памяти моей программы с использованием стандартного подхода OO, который будет использоваться для формирования AST.

Мне было интересно, есть ли случайно уже какие-либо фреймворки / генераторы кода, которые могли бы помочь мне с этой задачей.

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

Ответы [ 2 ]

4 голосов
/ 06 февраля 2012

Я настоятельно рекомендую вам взглянуть на Инструменты разработки Java Eclipse. Он включает в себя очень надежную структуру AST.

Насколько я понимаю, с помощью этого API вы будете иметь доступ ко всем атрибутам различных типов узлов AST, а также сможете создавать посетителей с помощью методов beginVisit() и endVisit().

1 голос
/ 07 февраля 2012

Похоже, что это ответ на вопрос:

http://www.jetbrains.com/mps/

Основная цель MPS - разрешить расширение языков.Это связано с тем, что для каждого существующего языка уже определен строгий синтаксис языка, что ограничивает его гибкость.

Проблема в расширении синтаксиса языка заключается главным образом в текстовом представлении кода.Это особенно верно, если мы хотим использовать различные языковые расширения, где у каждого может быть свой синтаксис.

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

В то же время MPS предлагает эффективныйспособ сохранить написание кода в текстовом виде.

При создании языка вы определяете правила для редактирования и рендеринга кода.Вы также можете указать систему типов языка и ограничения.Это позволяет MPS проверять программный код на лету и, таким образом, делает программирование на новом языке простым и менее подверженным ошибкам.

MPS использует генеративный подход.Вы также можете определить генераторы для их языка, чтобы преобразовать код на пользовательском языке в скомпилированный код на каком-либо традиционном языке.В настоящее время MPS особенно хорош, но не ограничивается генерацией кода Java.Вы также можете создавать XML, HTML, JavaScript и т. Д.

...