首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringTemplate和ASTs

StringTemplate和ASTs
EN

Stack Overflow用户
提问于 2014-08-19 19:43:14
回答 1查看 117关注 0票数 0

我使用StringTemplate执行从一种语言到多个后端的模型转换。我从手动生成的AST开始,它具有类层次结构,例如,语言中的类型。我的问题与StringTemplate中复杂层次结构的转换有关。让我们检查一下转换一个Type层次结构,这个层次结构是在类似于以下内容的类层次结构中实现的:

代码语言:javascript
复制
class Type { }
class IntType extends Type { ...bitsize for integer here... }
class Boolean extends Type {}
class ArrayType extends Type { ...array dimensions and base type here}
class RecordType extends Type { ...field information here...}

是否有任何基于类型信息的条件分支的方法?我已经看到了很多例子,它们直接在具体的语法中对一种语言进行条件分支,模板遵循产生式,但这不是我的情况。在我看来,至少有四种方法可以做到:

  1. 对于复杂的层次结构,根本不使用StringTemplate;而是直接在Java中翻译。然而,这意味着我对模板的使用非常少:我想要翻译的许多语言特性(参数、声明等)。每个元素都有类型,所以我只能对“叶级”元素使用模板。
  2. "Escape“使用Type对象的呈现器返回到Java中。这可能导致我使用呈现器调用Java,然后调用另一个StringTemplate对象来呈现各个类型,但我假设这是可以的。
  3. 将子类型的识别器添加到我的Java类中,我可以在模板中直接使用这些类并在那里进行条件格式化。
  4. 为感兴趣的对象构建字符串表示的getter/setter方法,例如:向my类添加一个string getStringTemplateTypeString(),然后使用: type.stringTemplateTypeString引用它

我相信,也有其他办法可以做到这一点;这里有很大的灵活性。我目前倾向于选择#2,但我想从这个受人尊敬的社区获得一些信息:)。我想以一种简单、本地的方式(我在添加额外后端时不需要更改文件中的内容)和清理。

非常感谢!

麦克

EN

回答 1

Stack Overflow用户

发布于 2014-12-03 09:50:49

根据我对您的问题的理解,工作可能是4和2的组合,其中您有一个将返回类型的方法,并根据它执行一个条件if- the块,并且在主模板本身内调用另一个模板。这样,您只需要在类中添加一个额外的getter即可。如果这不能解决你的问题就告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25391738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档