XText简单例子入门

教程不详细写,直接代码:
[b][size=medium][color=indigo]1.MyDsl.xtext[/color][/size][/b]

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

DomainModel:
entities+=Entity;
Entity:
'entity' name=ID '{' '}';

[b][size=medium][color=indigo]2.运行GenerateMyDsl.mwe2[/color][/size][/b]
[b][size=medium][color=indigo]3.Template.xpt[/color][/size][/b]

«IMPORT org::xtext::example::mydsl::myDsl»

«EXTENSION templates::Extensions»

«DEFINE main FOR myDsl::Entity-»
«FILE name+".java"-»
public class «name» {
public «name»(){}
}
«ENDFILE-»
«ENDDEFINE»

[b][size=medium][color=indigo]4.MyDslGenerator.mwe2[/color][/size][/b]
[b][color=red]
下面这句很重要,没有的话一般都不成功:
metaModel = org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel{}
[/color][/b]

module workflow.MyDslGenerator

import org.eclipse.emf.mwe.utils.*

var targetDir = "src-gen"
var fileEncoding = "UTF-8"
var modelPath = "src/model"

Workflow {

component = org.eclipse.xtext.mwe.Reader {
// lookup all resources on the classpath
// useJavaClassPath = true

// or define search scope explicitly
path = modelPath

// this class will be generated by the xtext generator
register = org.xtext.example.mydsl.MyDslStandaloneSetup {}
load = {
slot = "entities"
type = "Entity"
}
}

component = org.eclipse.xpand2.Generator {
metaModel = org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel{}
expand = "templates::Template::main FOREACH entities"
outlet = {
path = targetDir
}
fileEncoding = fileEncoding
}
}

[b][size=medium][color=indigo]5.Example.mydsl[/color][/size][/b]

entity EmptyEntity {
}

[b][size=medium][color=indigo]6.Extensions.ext[/color][/size][/b]

import org::xtext::example::mydsl::myDsl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值