JavaParser: как добавить новые языковые элементы - PullRequest
0 голосов
/ 09 мая 2018

Я хочу создать Java-транспортер, который будет читать почти Java-код (назовем его JavaHash) и генерировать «чистый» Java-код на другом конце.В частности, я хочу добавить новый токен, который является хеш-тегом "#" перед элементом hashmap, чтобы я мог получить к нему доступ, аналогично хеш-объекту JavaScript:

Map<String, String> foo = new HashMap<String, String>();
...
foo.put("name", "Roger");
...
String name = #foo.name;

Я не могу получитьJavaParser для выполнения чего-либо, кроме выдачи ошибки в хэш-теге "#".

Существуют ли способы перехвата токенов до их анализа?

1 Ответ

0 голосов
/ 09 мая 2018

Это очень далеко не тривиально, но выполнимо.

JavaParser основан на JavaCC , он использует следующую грамматику для генерации кода синтаксического анализатора. Затем синтаксический анализатор создает абстрактное синтаксическое дерево, используя классы модели кода.

Если вы хотите добавить новые языковые элементы, вам необходимо:

  • реализовать классы модели кода;
  • расширить грамматику, используемую для генерации парсера.

Это не так просто, вам потребуются хорошие знания и понимание JavaCC. Но это абсолютно выполнимо.

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

Кстати, JavaParser - очень хорошая основа для создания чего-то похожего на то, что вы хотите. Так что поздравляю с вашим выбором, на самом деле это половина сделки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...