Изменение синтаксиса 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.