Как можно было бы пойти о добавлении (незначительного) синтаксического сахара к Java?

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

Как можно было бы пойти о выполнении этого?

Я должен расширить компилятор байт-кода? (Который возможен?)

Я могу записать плагины Eclipse, чтобы сделать, простой исходный код преобразовывает прежде, чем подать его к стандартному компилятору Java?

5
задан polygenelubricants 7 March 2010 в 11:16
поделиться

4 ответа

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

См. http://twitter.com/headius/status/1319031705


А вот отличное руководство о том, как добавить новый оператор в javac, http: //www.ahristov. com / tutorial / java-compiler.html

Дополнительные ссылки можно найти в моем списке ссылок для хакеров javac .

2
ответ дан 18 December 2019 в 14:44
поделиться

Я бы взглянул на Project Lombok и попытался повторить их попытку. Они используют аннотации Java 5 для подключения Java-агента, который может манипулировать абстрактным синтаксическим деревом до компиляции кода. В настоящее время они работают над созданием API, позволяющего писать пользовательские трансформаторы, которые можно использовать с javac или основными IDE, такими как Eclipse и NetBeans. Помимо аннотаций, которые вызывают генерацию кода, они также планируют добавить изменения синтаксиса (возможно, синтаксис mixin или синтаксис замыкания до Java 7).

(возможно, я немного исказил некоторые детали, но я думаю, что я довольно близок).

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

Если это не удастся, вы можете попытаться изменить компилятор javac. Хотя из того, что я слышал, это, вероятно, будет упражнением по вытягиванию волос в разочаровании для любого, кто не является экспертом по компиляторам и Java.

6
ответ дан 18 December 2019 в 14:44
поделиться

Вы можете взломать javac с помощью JSR 269 (подключаемая обработка аннотаций). Вы можете подключиться к посетителю, который просматривает операторы в исходном коде, и преобразовать его.

Вот, например, ядро преобразования, чтобы добавить поддержку римского числа в java (прочитайте, конечно, полный post для получения более подробной информации). Это кажется относительно простым.

public class Transform extends TreeTranslator {
    @Override
    public void visitIdent(JCIdent tree) {
        String name = tree.getName().toString();
        if (isRoman(name)) {
            result = make.Literal(numberize(name));
            result.pos = tree.pos;
        } else {
            super.visitIdent(tree);
        }
    }
}

Вот дополнительные ресурсы:

Я не знаю, использует ли проект Lombok (цитируемый в другом ответе) ту же технику, но я думаю, что да.

3
ответ дан 18 December 2019 в 14:44
поделиться

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

См. http://twitter.com/headius/status/1319031705

2
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: