Изменение синтаксиса Java

Я хочу использовать существующий Java AST от Rascal, предоставляемый в библиотеке m3, но я хотел бы расширить его, чтобы добавить некоторые функции. Мы работаем с Java-подобным языком (около 95% Java и 5% наших специфических функций). В идеале я хотел бы иметь возможность взять синтаксис Java и код AST (src/org/rascalmpl/library/lang/java/syntax/Java15.rsc а также src/org/rascalmpl/library/lang/java/m3/AST.rscсоответственно) немного изменим синтаксис и добавим несколько новых узлов AST. Изучение и изучение того, как все это работает, показало, что все это работает не так, как другие примеры языка, которые я нашел.

Например, конструкторы в Java15.rsc не совпадают с конструкторами в AST.rsc Вот как все другие примеры языка работают. В настоящее время я понимаю, как все это работает, когда пользователь звонит createAstFromFile() что на самом деле происходит, это вызовы Rascal в некоторый код Java, который производит AST.

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

Могу ли я в любом случае "легко" извлечь синтаксис и части AST здесь и изменить их самостоятельно?

Благодарю.

1 ответ

Решение

M3 (и это AST) отключен от грамматики Java15. Он использовал Eclipse JDT для анализа и привязки имени. Если вы хотите расширить AST, вы можете добавить новые конструкторы в ADT.

data Expression = delayedCall(Expression receiver, str name, list[Expression] arguments);

Добавляет новую альтернативу Expression ADT.

Однако у нас нет java-принтера для AST, поэтому в зависимости от того, что вы хотите сделать, вам может потребоваться грамматика для вашего языка и работа с деревьями разбора. Вы можете расширить грамматику так же, как ADT.

Другие вопросы по тегам