3

这是一个潜在的危险问题,因为跨学科的问题和答案会有偏见,但无论如何我都会尝试一下。一切都好精神!

所以,我们开始吧。我正在为 Emacs 编写一个主要的编辑模式,它几乎不支持它。而我现在必须决定生成项目文件的方法。以下是未来任务的大纲:

  • 模板必须代表项目目录树,而不仅仅是单个文件。

  • 生成的文件具有各种格式,可能包括类似 SGML 的语言,但不限于这种类型。他们还必须生成类似 C 的源代码、eLisp 源代码和纯文本文件,例如 README。

  • 模板必须根据用户启动的操作批量处理(如用户想要创建一个项目 - 必须在用户指定的目录中创建多个文件)。具有监督创建的能力可能是有益的,但这不如完全自动运行该过程的能力重要。

奖励功能:

  • 模板语言已经有一个用户群(具有重用现有模板的潜力)。

  • 模板可用于代码片段(包含空白,一旦用户在编辑文件时调用代码生成例程,就会以交互方式填充这些空白)。

  • 显而易见的东西,例如跨平台性,通过图形界面和命令行都易于使用。

我做了一项研究,但我不会(还)分享我的结果,所以我不会对答案有偏见。回答这个问题的问题不是很难找到答案,而是很难从众多答案中选择一个。

4

3 回答 3

2

我正在为您描述的用例开发一个基于 Mustache 的系统。模板语言本身是 Mustache 的一个非常简单的扩展,称为Groome

我还发布了一个名为Molt的命令行工具,用于渲染 Groome 模板。我很想知道它是否可以满足您的所有需求。我仍在为该工具添加功能,但尚未宣布。谢谢。

于 2012-07-05T07:43:45.443 回答
1

几年前我去解决一个类似的问题,我想使用 Emacs 从 UML 图 (cogre) 生成代码,并从项目规范生成 Makefile。我第一次尝试使用 Tempo,但是当我尝试让模板嵌套时,我遇到了问题。我也研究了骨架,但这也不完全符合计划。

我最终使用了谷歌模板,并且喜欢它的语法,并开发了 SRecode,只是从谷歌模板中借用了一些好的部分。SRecode 是专门为机器生成的代码编写的。模板插入的交互(又名 - 编写的节奏)不是 SRecode 中的第一类。然而,对于从数据结构生成代码,它非常健壮,并且具有很多特性,并且可以自动填充变量。它与您的主要模式密切合作,并允许许多嵌套模板,并控制嵌套字典值。有一个子系统将使用语义标签并从中为几种语言生成代码。这意味着您可以使用 Semantic 解析一种语言的代码,并使用这些标签使用 SReocde 生成另一种语言的代码。漂亮!

模板本身允许循环、if 语句和 include 语句。SRecode 中有几个用于制作“应用程序”的示例,例如评论编写器,EDE 使用它来创建 Makefile,这几乎正是您想要做的。

于 2012-06-23T01:01:48.780 回答
0

另一个选择是Generator,它提供“语言无关的项目引导,强调简单性”。安装需要Node.js 和 npm

Generator 对简单性的强调意味着学习如何制作模板非常容易。生成器还使您不必通过文件路径引用模板——它在~/.generator.

但是,如果不将这些文件复制到生成的项目中,就无法为模板本身编写文件READMELICENSE此外,写在 中的后生成命令Makefile将被复制到生成的Makefile中,即使它们不再使用。最后,ad-hoc 模板语言并没有提供逃避它的方法__lowercasevariables__——尽管我想不出有一种语言会出现这种限制。

于 2015-10-13T03:22:03.290 回答