在网络上有一些关于编写Scala编译器插件进行代码模式匹配的资源,但这些并不能帮助生成代码(构造符号树)。我该从哪里开始学习如何做到这一点?(如果有比手动构建符号树更简单的方法,我也很感兴趣。)
例如,我想编写一个插件,将某些代码替换为此表达式的简单AST,其中变量(从原始程序代码中提取)可以是任何类型:
"" + hello + ", " + world + "!"
我意识到这可能会很棘手,因为涉及到装箱和toString
,例如,如果hello
是一个对象,而world
是一个整数,那么这应该是:
"".+(hello.toString().+(", ".+(new Integer(world).toString().+("!"))))