什么是AST转换?

Ara*_*nth 35 groovy abstract-syntax-tree program-transformation

什么是AST转换?我在阅读Groovy博客时遇到过这些话.但它一般是什么?

Mar*_*kus 22

AST表示抽象语法树,它基本上是代码/任何语法结构的抽象表示.转换是修改此树的操作(即将现有AST转换为新AST).有关更多信息,请访问:http://en.wikipedia.org/wiki/Abstract_syntax_tree


SK-*_*gic 7

除了已经提到的内容之外,您可能还对更广泛且更基本的术语重写概念感兴趣.


Ira*_*ter 6

简单的答案是将一个AST转换为另一个AST的任何函数.

在我的模型驱动开发的答案中可以找到更复杂的视图:什么是变换?

  • Downvoter/Flagger:鉴于其他人认为我的回答非常好,您应该在此处注明您的反对意见而不是简单地标记并运行,这似乎是合理的。 (2认同)
  • Mixins是一种运行时方案,用于通过允许其他行为b("之前")和("之后")调整基线行为f.您产生的行为是b dot f dot a(行为的组合).您可以获得的行为范围显然受到f处理其输入的方式的限制.程序转换(PT)采用任意*规范*f并应用转换以生成具有与f相同的抽象行为的另一个规范f'.... (2认同)
  • ...可以使用PT来实现mixins(只需应用插入b和a的实现f的转换),因此PT至少与Mixins一样强大.但Mixins仅限于特定的编程语言,其中f,a和b必须编码; 完成权利的PT系统没有这样的限制.所以Mixins的功能严格不如PT.(事实上​​,PT可以在f上实现任意计算以产生结果,这更像是Mixins可以限制为"用b和a组成f").PT在允许人们使用抽象而不仅仅是代码方面也很有价值.... (2认同)
  • ...为了真正了解实际差异,请考虑如何解决将用JOVIAL编码的B-2隐形轰炸机的任务软件转换为带有"Mixins"的C的问题.很明显,Mixins不能解决这个问题,但PT可以通过"技术上的简单"方式实现这一点(我的公司实际上已经这样做了).或者考虑将在std :: vectors上运行的C++代码转换为混合C++和SIMD机器指令,以实现高性能执行; 再一次,mixins无法接近这一点,我的公司再一次用PT做到了这一点. (2认同)