Сборка АСТ автоматически - PullRequest
0 голосов
/ 30 октября 2019

У меня есть парсер для устаревшего языка программирования. AST отсутствует в анализаторе, и мне нужно автоматически создать AST при добавлении атрибутов к узлу. Например, давайте рассмотрим приведенный ниже узел вместе с некоторыми пользовательскими узлами, расширяющими узел:

class Node {
    List<Node> parent;
    List<Node> child;
//getters and setters
}
final class MethodNode extends Node {
    Object o1;
    IfExpression o2;
//getters and setters
}
final class IfExpression extends Node {
    Object o1;
//getters and setters
}

Допустим, я устанавливаю IfExpression в MethodNode, тогда это означает, что MethodNode является родителем IfExpression в AST. Поэтому мне нужно добавить логику вставки в установщики MethodNode (Parent), как показано ниже

public void setO2(@NonNull final IfExpression o2){
    this.o2 = o2;
    super.child.add(o2);
    o2.parent.add(this);
} 

После завершения анализа у меня есть логика для автоматического создания AST с помощью отражения. Логика отражения:

  1. Итерировать все поля в узле / пользовательских узлах
  2. Проверить, не является ли поле пустым
  3. Если да,Проверьте, имеет ли поле тип Узел
  4. Если да, Вставьте в родительский и дочерний список
  5. Я также добавил несколько пользовательских аннотаций на случай, если нам нужно игнорировать определенные поля. Так что есть эта проверка вместе со 2-м и 3-м условиями, упомянутыми выше.

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

...