You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xtext中为生成代码复刻源码目录结构

解决Xtext生成器保留源文件目录结构的问题

没问题,咱们来调整生成器代码,让.obj文件自动匹配源文件的目录结构存到src-gen里,具体步骤如下:

首先,你需要从Resource对象里拿到源文件的相对路径,然后对路径做两个替换:把扩展名从.src改成.obj,再把路径开头的src/替换成src-gen/。这样就能完美保留原有的多级目录结构了。

修改后的完整doGenerate方法代码如下:

override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
    // Root node of parsing tree
    val Program prg = resource.allContents.filter(Program).next()
    // Compiled code
    var String code = prg.compile().toString()
    
    // 获取源文件的平台相对路径(比如"src/one/A.src")
    val sourcePath = resource.getURI().toPlatformString(true)
    // 替换扩展名:把.src换成.obj
    val pathWithObjExt = sourcePath.replace(".src", ".obj")
    // 替换根目录:把src/开头换成src-gen/
    val outName = pathWithObjExt.replaceFirst("^src/", "src-gen/")
    
    // Generate output
    fsa.generateFile(outName, code)
    ...
}

代码解释:

  • resource.getURI().toPlatformString(true):获取源文件相对于项目根目录的路径,true参数表示不包含项目名称,直接返回src/xxx/xxx.src这种格式。
  • replace(".src", ".obj"):简单替换文件扩展名,适配你的需求。
  • replaceFirst("^src/", "src-gen/"):用正则匹配路径开头的src/,只替换一次,确保多级目录的结构不会被破坏,比如src/one/two/A.src会变成src-gen/one/two/A.obj。

这样修改后,src目录下任何多级目录里的.src文件,生成的.obj都会自动对应到src-gen的相同子目录里,完全符合你的预期~

内容的提问来源于stack exchange,提问作者mzattera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:51:24