标签: code-generation

使用Codedom生成C#自动属性

有没有办法使用Codedom生成C#自动属性,或者我可以使用其他一组libreries ?

.net c# code-generation codedom

7
推荐指数
3
解决办法
5759
查看次数

从Java源生成UML

因为我有一个大项目,我必须为此生成UML.为300个类编写UML是过度的.

那么有什么解决方案可以为我生成图表吗?

PS
我正在使用Netbeans.

java uml netbeans code-generation

7
推荐指数
1
解决办法
9042
查看次数

带有Java代码生成的Eclipse UML插件

有没有人知道一个好的(阅读:免费)Eclipse UML插件,也可以做代码生成?如果没有,有没有人知道任何好的Eclipse UML插件?

编辑:我在Fedora Linux上运行Eclipse IDE

TIA

菜鸟

java eclipse plugins uml code-generation

7
推荐指数
1
解决办法
2万
查看次数

C和Matlab:为什么Matlab中的这一行在Matlab Coder生成的C++代码中变得如此之多?

我有一些运行数百万次的Matlab代码,如本问题所述:Matlab:从循环中重复调用相同的mex函数会产生太多的开销吗?

我正在尝试mex-ify,看看是否有帮助.现在,当我使用Matlab Coder工具从Matlab代码生成代码时,代码通常是合理的,但是这一行Matlab代码(在下面第一行的C++注释中)会产生这种怪异,我不知道为什么.任何帮助理解和降低其复杂性将不胜感激.

对于上下文,d是二维矩阵,s1是行向量.在前面的C++代码中,s1_idx被指定为长度(s1)+ 1,

/* d(:, 1) = 0:length(s1); */
cdiff = s1_idx_0 - 1;
for (nm1d2 = 0; nm1d2 <= cdiff; nm1d2++) {
   tmp_data[nm1d2] = nm1d2;
}
ndbl = (int32_T)muDoubleScalarFloor((real_T)s1_sizes[1] + 0.5);
apnd = ndbl;
cdiff = ndbl - s1_sizes[1];
if (muDoubleScalarAbs((real_T)cdiff) < 4.4408920985006262E-16 * (real_T)s1_sizes[1]) {
   ndbl++;
   apnd = s1_sizes[1];
} else if (cdiff > 0) {
   apnd = ndbl - 1;
} else {
   ndbl++;
}
if (ndbl > 0) {
   b_tmp_data[0] = 0.0;
   if …
Run Code Online (Sandbox Code Playgroud)

c c++ matlab code-generation

7
推荐指数
1
解决办法
563
查看次数

SCons生成可变数量的目标

我试图SCons生成多个目标(直接编号未知SConscript).

我有这样的目录:

headers/
  Header1.h
  Header2.h
  Header3.h
  Header4.h
meta/
  headers_list.txt
Run Code Online (Sandbox Code Playgroud)

现在我想要SConscript读取headers_list.txt,基于其内容选择文件从headers/目录(即它可能只包含Header1和Header3),对于我想要使用某些函数生成源的每一个.

我一直试图用env.Command它来做,但问题是它需要调用者指定目标列表,由于显而易见的原因在调用时不知道env.Command.

我唯一能想到的就是跑步:

for header in parse( headers_file ):
    source = mangle_source_name_for_header( header )
    env.Command( source, header, generator_action )
Run Code Online (Sandbox Code Playgroud)

但这意味着parse( headers_file )每次调用时我都会运行scons.如果解析成本高昂且文件不经常更改,则可以轻松缓存此步骤.

为实现缓存,我缺少什么SConsc构造/类/技术?

编辑:

看来我的问题类似于SCons目标的构建时间确定,但是没有人工虚拟文件的技术吗?

此外,即使使用临时文件,我也看不出我应该如何将target变量从Command生成可变数量的目标传递给第二个将迭代它们的目标.

编辑2:

这很有希望.

python code-generation scons

7
推荐指数
1
解决办法
1697
查看次数

如何在代码生成过程中简化包含变量的C风格算术表达式?

我正在尝试在编译器中优化表达式评估.

算术表达式都是C风格的,它们可能包含变量.我希望尽可能地简化表达式.

例如,(3+100*A*B+100)*3+100可以简化为409+300*A*B.

它主要取决于分配法,联想法和交换法.

我遇到的主要困难是如何结合这些算术规律和传统的堆栈扫描评估算法.

任何人都可以在编译器构建的上下文中分享与此或类似问题相关的经验吗?

c++ compiler-construction algorithm code-generation

7
推荐指数
1
解决办法
370
查看次数

我们可以同时从CodeExpressions和文字源代码构造一个程序集吗?

我有一种情况,我的代码的一部分是CodeExpressions由用户自己生成的,另一部分是由用户自己生成的(例如:用户只需像往常一样编写代码,然后我会在编译时将其添加到我的程序集中).

是否可以生成包含这两个项目的程序集?警告:这两种方法将包含partial类,因此它们必须位于同一个程序集中.

我想到的另一种方法是将这两种方法转换为字符串表示,然后从该字符串生成程序集,但我怀疑我可以从用户生成的类型中获取源代码(在编译时).

根据这个想法,我可以将CodeExpressions生成的代码写入文本文件并将其与.cs文件结合起来.时间表看起来像这样:

  • 用户写了他的课
  • CodeDom树以编程方式设置
  • 用户构建项目
  • CodeDom生成文本文件的源
  • 程序读取用户定义.cs文件的内容
  • 程序读取生成的文本文件
  • 程序结合了这两个
  • 程序.dll从组合源代码中创建一个新的

我可以跳过将我生成的CodeDom源写入和读取文本文件的(冗余)步骤,并简单地将其写入内存,当然.事实上,使用预处理T4模板并将这些模板的结果加载到内存中并从该字符串编译程序集可能最简单.

正如你所看到的,这是非常混乱的,但现在它看起来是最可行的.我是否看过任何可能使这更容易的选项?

背景:

我正在创建一个库,该库将创建一个包含用户定义的类的程序集.这种方式的工作方式如下:

  • 用户在他的项目中引用我的库
  • 用户创建新TinyTypeSetup实例
  • 用户为其添加了Tiny Type定义
  • 用户运行程序
  • 程序通过CodeDom从给定类型生成程序集

我现在想要添加的是用户可以创建自己的源文件并立即将这些文件添加到生成的程序集中.这将允许用户使用他自己的方法指定部分类,除了我自己生成的那些.

c# code-generation codedom .net-assembly

7
推荐指数
1
解决办法
279
查看次数

来自JSON(代码生成)的模型的Dart类

我正在看这个主题:https://groups.google.com/a/dartlang.org/forum/#!topic / misc/pv-Uaq8FGI,但仍无法找到我希望在客户端上拥有的解决方案方(也可能在服务器上).

我想应该有一种方法为数据结构提供标准格式,在JS land中表示为JSON对象(例如json schema或yaml或者其他),可以用作生成包含fromJSON构造函数的Dart类的输入. toJSON方法(可能对数据范围进行一些检查),如果需要通过线路传输的数据需要额外的逻辑,开发人员可以扩展.

如果可能的话我不想使用镜像,而是应该静态生成类(即运行工具 - >获取类以匹配最新的模式/输入).

你能指出我正确的方向吗?

谢谢.

code-generation dart

7
推荐指数
1
解决办法
393
查看次数

Bazel头文件代码生成器

我试图通过编写规则来执行生成器来为我的bazel构建添加代码生成器,但我坚持将生成的头文件作为包含路径依赖添加到我正在尝试构建的库中.

该规则如下所示:

def _impl(ctx):
  output = ctx.outputs.out
  input = ctx.attr.defs
  md_dir = list(ctx.attr.md_dir.files)[0]
  print("generating", output.path)
  ctx.action(
      outputs=[output],
      progress_message="Generating %s" % md_dir,
      command="python codegen.py -md_dir %s %s -o %s" % (md_dir.path, input, output.path)
  )

code_generate = rule(
  implementation=_impl,
  attrs={
       "defs": attr.string(),
       "md_dir": attr.label(allow_files=True, single_file=True),
       "out": attr.output()
       },
)
Run Code Online (Sandbox Code Playgroud)

和BUILD文件是这样的:

load("/common/code_generate", "code_generate")

code_generate(
  name="generate_header_defs",
  defs="common/header_definition_file",
  md_dir="header_defs",
  out="gen_header.h",
)

cc_library(
  name="lnt",
  hdrs=glob(["*.h"]),
  srcs=["source.c":gen_header.h"],
  visibility=["//visibility:public"],
  deps=["@dep1//:x", "@dep2//:y", "@dep3//:z"],
)
Run Code Online (Sandbox Code Playgroud)

代码生成工作并将代码写入bazel-out/local-fastbuild/bin/common/gen_header.h但gcc命令行不会将生成的头文件的include路径添加到导致错误的内容:gen_header.h:否这样的文件或目录

c c++ code-generation bazel

7
推荐指数
1
解决办法
1990
查看次数

java.lang.AssertionError thrown by compiler when adding generated method with parameters

I am modifying an existing class using internal sun APIs (com.sun.tools.javac) with an annotation processor. I am able to generate and add a MethodDecl to a ClassDecl using the following code:

JCTree.JCClassDecl classDecl = ...
JCTree.JCMethodDecl methodDecl = ...
JCTree[] trees = new JCTree[classDecl.defs.length() + 1];
trees[classDecl.defs.length()] = methodDecl;
classDecl.defs = List.from(trees);
Run Code Online (Sandbox Code Playgroud)

This works fine until I try to add parameters to the method declaration. I use the following code to generate a new MethodDecl:

Map<String, Class<?>> …
Run Code Online (Sandbox Code Playgroud)

java code-generation sun

7
推荐指数
2
解决办法
975
查看次数