Какой самый простой способ расширить синтаксис Java (гигиенические макросы) - PullRequest
3 голосов
/ 15 декабря 2011

Я ищу способ расширить синтаксис Java, в основном я хочу реализовать систему «макроса», которая позволяет использовать препроцессор, который будет изменять AST во время компиляции.

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

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

Почему я хочу это сделать?Я хочу попробовать, если возможно, добавить синтаксис сопоставления с образцом, вывод типа, действительно читаемый синтаксис функции и т. Д. С Java.

Ответы [ 2 ]

1 голос
/ 03 декабря 2013

Если вы используете Eclipse IDE, вы можете заглянуть в проект Eclipse Xtend .

Он поддерживает расширение Java с помощью пользовательских макросов посредством активных аннотаций .

1 голос
/ 15 декабря 2011

Я не знаю, будет ли сотрудничать Java-компилятор COTS с вами, пытаясь расширить его синтаксис. И я не думаю, что это восстановит исходный код, но тогда вам может быть все равно, если вы хотите скомпилировать программы только после расширения ваших макросов.

Если вы хотите расширить грамматику, вы, как минимум, должны получить генератор синтаксического анализатора, грамматику для Java и начать взламывать. ANTLR подойдет, и я считаю, что у него есть доступная грамматика Java. Вам нужно будет создать симпатичный принтер для регенерации макро-разрешенного кода для передачи в компилятор; Я не думаю, что ANTLR предлагает это с полки.

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

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

...