标签: code-generation

如何使用 Maven 从模板生成源代码?

我有一个包含令牌列表的文件:

令牌.txt

foo
bar
baz
Run Code Online (Sandbox Code Playgroud)

和一个模板文件:

模板.txt

public class @token@MyInterface implements MyInterface {
     public void doStuff() {
        // First line of generated code
        // Second line of generated code
     }
}
Run Code Online (Sandbox Code Playgroud)

我想生成以下源代码文件target/generated-sources/my/package:

  • FooMyInterface.java
  • BarMyInterface.java
  • BazMyInterface.java

生成的源文件之一如下所示:

FooMyInterface.java

public class FooMyInterface implements MyInterface {
     public void doStuff() {
        // First line of generated code
        // Second line of generated code
     }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 Maven 做到这一点?

java code-generation maven

5
推荐指数
1
解决办法
4367
查看次数

Python:打印基类变量

我正在使用一个库在 C++、VHDL 和 SystemVerilog 之间共享数据。它使用代码生成器来构建包含适当字段的数据结构。想想 ac 类型的数据结构。我想生成包含数据结构和读/写函数的 python 代码,以将数据结构的内容从 / 设置和写入文件。

为此,我尝试编写一个程序,打印基类中的所有变量以及子类的更新,但不打印子类变量。

这个想法是,类 A 是实际的 VHDL/SystemVerilog/C++ 记录/结构,类 B 包含进行处理并生成类 A 中的值的逻辑。

例如:

class A(object):
    def __init__(self):
        self.asd = "Test string"
        self.foo = 123

    def write(self):
        print self.__dict__

class B(A):
    def __init__(self):
        A.__init__(self)
        self.bar = 456
        self.foo += 1

    def write(self):
        super(B, self).write()
Run Code Online (Sandbox Code Playgroud)

调用 B.write() 应产生以下结果:(注意 foo 的递增值)

“asd:测试字符串,foo:124”

但它却产生了

“asd:测试字符串,bar:456,foo:124”。

有没有办法只获取基类变量?我可以将基本字典与子类字典进行比较,并只打印两者中出现的值,但这感觉不是一个干净的方法。

python inheritance code-generation vhdl system-verilog

5
推荐指数
1
解决办法
1896
查看次数

如何查看scala编译器生成的代码

我是斯卡拉新手。我使用 IntelliJ Idea 社区版。

我知道可以看到 Scala 编译器生成的 Java 代码:

  1. 使用 javap(或任何其他反编译器)

  2. 或者使用scalac MyClass.scala -print命令

如何直接在 IDE 中查看该代码,而无需每次从控制台复制粘贴?

code-generation scala intellij-idea

5
推荐指数
0
解决办法
665
查看次数

STM32 CubeMX 自定义代码生成

我正在使用STM32CubeMX并尝试使用所用外围设备表生成自定义代码 (UM1718 第 141 页) 。在闪存中很容易拥有常量表,其中包含按预期用途分组的外围句柄和实例。例如这个头文件:

一些.h:

/* TIM table */
#define EM_TIM1     0       // index
#define EM_TIM6     1

#define TIM_CNT     2       // count

#define TIM_0_INST      TIM1        // table of instaces
#define TIM_1_INST      TIM6

extern TIM_HandleTypeDef htim1;     // table of handles
extern TIM_HandleTypeDef htim6;

#define TIM_0_HNDL      htim1       // table of handles
#define TIM_1_HNDL      htim6

struct tim_tab_s {
    TIM_TypeDef * inst;
    TIM_HandleTypeDef * hndl;
};

extern struct tim_tab_s const tim_tab[TIM_CNT];
Run Code Online (Sandbox Code Playgroud)

我已经使用此自定义模板生成:

一些_h.ftl:

[#ftl]
[#list configs as dt] …
Run Code Online (Sandbox Code Playgroud)

code-generation freemarker stm32

5
推荐指数
1
解决办法
4749
查看次数

Prolog:代码生成

从 prolog 程序输出 prolog 代码的最惯用的方法是什么(作为副作用)?

例如,在一个简单的情况下,我可能想编写一个程序,在给定文本输入的情况下,生成另一个将文本表示为有向图的 Prolog 程序。

我知道这个问题有些模糊,但在现有的 Prolog 元编程文献(主要涵盖元循环解释器的应用)中未能找到令人满意的答案后,我已经不再咨询 Stackoverflow。

如果您认为这个问题可以通过其他方式更好地表达,请编辑或发表评论。

code-generation metaprogramming prolog

5
推荐指数
2
解决办法
1093
查看次数

如何使用funset_avltree库?

我正在尝试使用该funset_avltree库,但编译器生成无效的 C 代码。我正在使用 ATS/Postiats 版本 0.2.10。

我的代码相当简单:

(* ast.sats *)
staload "libats/SATS/funset_avltree.sats"

datatype ast =
  | ast_var of string

fun free_vars (ast : ast) :<> set string
Run Code Online (Sandbox Code Playgroud)
(* ast.dats *)
#include "share/atspre_staload.hats"
staload "./ast.sats"
staload "libats/SATS/funset_avltree.sats"
dynload "libats/DATS/funset_avltree.dats"

implement free_vars (ast : ast) : set string =
  case+ ast of
  | ast_var name => funset_sing name
Run Code Online (Sandbox Code Playgroud)

然而,编译器的输出相当混乱:

ast_dats.c:359:51:警告:函数“S2EVar”的隐式声明无效
      在 C99 中 [-Wimplicit-function-declaration]
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ;
                                                  ^

ast_dats.c:359:39:错误:使用未声明的标识符“funset_sing”
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ;
                                      ^

ast_dats.c:359:64:错误:预期表达式
ATSINSmove(tmpret0, PMVtmpltcstmat[0](funset_sing<S2EVar(4713)>)(tmp1)) ;
                                                               ^

funset我在和 …

code-generation compiler-errors ats

5
推荐指数
1
解决办法
92
查看次数

添加对 Gradle 中生成的源集的运行时依赖

我想创建一个项目,其构建过程包括一些代码生成。生成的代码在编译时依赖于主代码(它扩展了公共基类)和 JCenter 的模块。主代码实际上对生成的代码具有运行时依赖性;也许更正确的说法是应用程序对主代码和生成代码都具有运行时依赖性,以及两者的模块依赖性。

\n\n

编辑:为了使依赖关系更清晰,这是一个粗劣的图表,其中箭头从配置指向它所依赖的东西。正如您所看到的,依赖图中没有循环。

\n\n
main compile \xe2\x86\x90 generated compile \xe2\x86\x92 generated module\n      \xe2\x86\x91                \xe2\x86\x91\nmain runtime \xe2\x86\x92 generated runtime\n
Run Code Online (Sandbox Code Playgroud)\n\n

我真的很想将生成的代码放在主代码的单独源集中。我也很想使用应用程序插件来提供gradle run和gradle installDist.

\n\n

我正在使用最新的 Gradle 3.3。

\n\n

我创建了一个项目来尝试这个。其中,源集是:

\n\n
sourceSets {\n    generated {\n        java {\n            srcDirs = ["$buildDir/src/generated/java"]\n            compileClasspath += sourceSets.main.output\n        }\n    }\n    main {\n        java {\n            runtimeClasspath += sourceSets.generated.output + sourceSets.generated.runtimeClasspath\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

还有一个生成代码的任务:

\n\n
task generateSource {\n    doLast {\n        // generate the code into sourceSets.generated.java.srcDirs[0] here\n    }\n}\n\ncompileGeneratedJava.dependsOn generateSource\n
Run Code Online (Sandbox Code Playgroud)\n\n …

code-generation gradle

5
推荐指数
1
解决办法
3052
查看次数

How can I autogenerate ORM code for SQLAlchemy when consuming TSQL (mssql on SQL Server) from python?

SQLAlchemy relies on me building ORM classes like this:

from sqlalchemy import Column, DateTime, String, Integer, ForeignKey, func
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Department(Base):
    __tablename__ = 'department'
    id = Column(Integer, primary_key=True)
    name = Column(String)
Run Code Online (Sandbox Code Playgroud)

有没有可以为我完成此操作的工具/脚本/程序?

例如,在 C# 中,我只需将数据项从数据库资源管理器拖放到 VisualStudio 中,即可自动生成实体类(SQL 到 LINQ)。我正在为 python 寻找类似的东西。我正在 VisualStudio 和/或 Spyder 中工作。

python orm code-generation sqlalchemy visual-studio

5
推荐指数
1
解决办法
4448
查看次数

在 IntelliJ 中自定义“代码”&gt;“生成”&gt;“构造函数”

Code我想在选择> Generate>时自定义 IntelliJ 2017.2 生成的参数的命名Constructor:

  • 标记它们final。
  • 附加Arg到每个变量名称的末尾。
    例如,firstNameArg&lastNameArg而不是firstName& lastName。
  • 用 注释每个参数@NotNull。

有什么方法可以自定义构造函数代码的生成吗?

这个问题,Customizing of code Generation in IntelliJ IDEA,是类似的,但 (a) 不涉及构造函数,并且 (b) 可能已经过时。

java constructor code-generation intellij-idea

5
推荐指数
1
解决办法
2284
查看次数

是否有宏或类似的解决方法可以在编译时包含源文件夹(src)路径?

是否有 Rust 宏或类似的解决方法来包含cargo new在我的源文件中创建的“src”文件夹的路径作为编译时或具体执行时的字符串文字cargo build?

我已经成功地完成了类似的操作,用于include_str!包含文件内容,但我需要知道是否可以直接在代码中包含 src 路径。

code-generation compilation rust rust-cargo rust-macros

5
推荐指数
1
解决办法
2147
查看次数