首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现doGenerate-method?

如何实现doGenerate-method?
EN

Stack Overflow用户
提问于 2020-06-19 23:29:20
回答 1查看 68关注 0票数 0

我想实现一个doGenerate方法。我不明白我该如何开发所有这些方法。也许有人可以给我一个例子,为我的问题的前2-3个方法。

这是我的Xtext文件:

代码语言:javascript
复制
Model:
    usestory += UseStory*;

UseStory:
title=Title role=Role target=Target use=Use;


Title:   
    titlen= NOUN  titlev=Verbwrapper ':';

Role:
    'Als' role=NOUN;

Target:
    'möchte' 'ich' targetn=NOUN targetv=Verbwrapper ',';

Use:
   'um' usen=NOUN 'zu' usev=Verbwrapper '.';


Verbwrapper: value=VERB;



terminal NOUN: ('Ä'|'Ö'|'Ü'|('A'..'Z'))(('a'..'z')|'ä'|'ö'|'ü'|'ß')*;
terminal VERB: ('ä'|'ö'|'ü'|'ß'|('a'..'z'))+('en')|('eln')|('n');

这就是我读到的关于Xtend的内容,不能理解单个方法的实现。

代码语言:javascript
复制
/*
 * generated by Xtext 2.19.0
 */
class HellodslGenerator extends AbstractGenerator{

    String code

    override void doGenerate
(Resource resource, IFileSystemAccess2 fsa,IGeneratorContext context)
{
    code=""
for (e: resource.allContents.filter(Model).toIterable)
{
    e.funktion
}
fsa.generateFile("test.txt",code)
}


def conc(String str) { 
code = code + str;
}

def funktion(Model m)
    m.UseStory.funktion

}

我想简单地打印编辑器中的所有句子。

EN

回答 1

Stack Overflow用户

发布于 2020-06-20 02:33:09

您通常不会基于编辑器中的内容进行生成,而是基于AST中的内容进行生成。如果用Xtend编写生成器,通常也会使用Xtend中的富字符串特性。这可能看起来非常简单,就像

代码语言:javascript
复制
class MyDslGenerator extends AbstractGenerator {

    override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
        fsa.generateFile("test.txt", '''
        «FOR model : resource.allContents.filter(Model).toIterable»
            «FOR userStory : model.usestory»
            userstory
            - title: «userStory.title.titlen» «userStory.title.titlev.value»
            - role: «userStory.role»
            - target: «userStory.target.targetn» «userStory.target.targetv.value»
            - use: «userStory.use.usen» «userStory.use.usev.value»
            «ENDFOR»
        «ENDFOR»
        ''')
    }
}

当然,您也可以通过nodemodel访问文本。这看起来像这样

代码语言:javascript
复制
class MyDslGenerator extends AbstractGenerator {

    override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
        fsa.generateFile("test.txt", '''
        «FOR model : resource.allContents.filter(Model).toIterable»
            «FOR userStory : model.usestory»
                «NodeModelUtils.findActualNodeFor(userStory)»
            «ENDFOR»
        «ENDFOR»
        ''')
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62473581

复制
相关文章

相似问题

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