Есть несколько ресурсы в Интернете, которые поучительны для написания подключаемых модулей компилятора Scala, которые сопоставляют шаблон с кодом, но не помогают в генерации кода (построении деревьев символов). С чего мне начать разбираться, как это сделать? (Если есть более простой способ, чем создание деревьев символов вручную, мне тоже было бы интересно.)
Например, я хотел бы написать плагин, который заменяет некоторый код простым AST для этого выражения, где переменные (извлеченные из исходного кода программы) могут быть любого типа:
"" + hello + ", " + world + "!"
Я понимаю, что это может быть сложно из-за бокса и toString
, например. если hello
был объектом, а world
был целым числом, это действительно должно было бы выглядеть примерно так:
"".+(hello.toString().+(", ".+(new Integer(world).toString().+("!"))))