标签: code-generation

需要源到源编译器框架

我曾经使用OpenC++(http://opencxx.sourceforge.net/opencxx/html/overview.html)执行代码生成,如:

资源:

class MyKeyword A {
  public:
    void myMethod(inarg double x, inarg const std::vector<int>& y, outarg double& z);
};
Run Code Online (Sandbox Code Playgroud)

产生:

class A {
  public:
    void myMethod(const string& x, double& y);
    // generated method below:
    void _myMehtod(const string& serializedInput, string& serializedOutput) {
      double x;
      std::vector<int> y;
      // deserialized x and y from serializedInput
      double z;
      myMethod(x, y, z);
    }
};
Run Code Online (Sandbox Code Playgroud)

这种代码生成通过编写元级别的程序来直接匹配OpenC++教程中的用例(http://www.csg.is.titech.ac.jp/~chiba/opencxx/tutorial.pdf) "MyKeyword","inarg"和"outarg"并执行代码生成.但是,OpenC++现在已经过时并且处于非活动状态,我的代码生成器只能在g ++ 3.2上运行,并且在解析g ++更高版本的头文件时会触发错误.

我查看了VivaCore,但它没有提供编译元级程序的基础结构.我也在看LLVM,但是我找不到能够帮助我完成源到源编译用法的文档.我也知道ROSE编译器框架,但我不确定它是否适合我的用法,以及它的专有C++前端二进制文件是否可用于商业产品,以及Windows版本是否可用.

任何对特定教程/论文/文档的评论和指示都非常感谢.

c++ code-generation code-translation

8
推荐指数
1
解决办法
1613
查看次数

IntelliJ IDEA Hibernate

我正在学习休眠,我遇到了一些问题.我正在读O'Reilly的"Harnessing Hibernate".他们使用ANT解释所有内容,但由于我想避免编写一个巨大的build.xml文件,我试图让它与IntelliJ一起工作.

我设法根据MySQL数据库中的DB表进行映射,并为其编写bean.它工作,但我找不到任何有关如何生成bean和SQL代码,或如何使用IntelliJ进行逆向工程的信息.我使用JBOSS Hibernate工具插件找到了大量关于Eclipse的教程,并且该网站声称这种生成代码的支持已经在IntelliJ的标准安装中.

我忘记了添加库等配置吗?我试图找到这个,但我现在绝望了.请不要建议我使用Eclipse,我需要IntelliJ作为我当前的角色.

java code-generation hibernate intellij-idea

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

从字符串创建函数对象

问题:有没有办法在python中使用字符串创建一个函数对象?


信息:我正在开发一个项目,我将数据存储在sqlite3服务器后端.没什么可疯狂的.DAL类通常是通过代码生成完成的,因为代码是如此令人难以置信的平凡.但这给了我一个想法.在python中,当找不到属性时,如果定义函数" getattr ",它将在错误之前调用它.所以我想通过解析器和逻辑树的方式,我可以在第一次调用时动态生成我需要的代码,然后将函数对象保存为本地属性.例如:

DAL.getAll()

#getAll() not found, call __getattr__

DAL.__getattr__(self,attrib)#in this case attrib = getAll

##parser logic magic takes place here and i end up with a string for a new function

##convert string to function

DAL.getAll = newFunc

return newFunc
Run Code Online (Sandbox Code Playgroud)

我已经尝试过编译功能,但exec和eval在能够完成这种壮举方面远非令人满意.我需要能够实现多种功能的东西.还有另一种方法可以做到这一点,除了那些不涉及将其写入磁盘?我再次尝试动态创建一个函数对象.

PS:是的,我知道这有可怕的安全和稳定性问题.是的,我知道这是一种非常有效的方法.我关心的?没有.这是一个概念证明."可以python这样做吗?它能动态创建一个函数对象 "是我想知道的,而不是一些优越的选择.(尽管在你回答了手头的问题之后可以自由地选择优秀的替代方案)

python code-generation function-object

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

Typecheck生成的代码可以访问Haskell中动态加载的代码

我需要一种快速的方法(每秒1000次的typechecks)来检测生成的Haskell源代码.

我们尝试了足够快的提示,除了它无法访问动态加载的代码,除非源代码可用,在某些情况下我们不会.也许有一些方法可以将动态加载的代码注册为一个包或者什么东西,因为提示可以访问注册的包呢?

我们尝试使用ghc api,但它似乎要求文件在磁盘上,并且所需的所有文件IO都会使它太慢.

我们可以使用haskell-src-exts来生成代码,但是我们需要对它进行类型检查.

haskell code-generation

8
推荐指数
1
解决办法
217
查看次数

GWT TypeOracle.getTypes不返回所有类型

我有一个自定义生成器,只为我的项目中的某些类生成代码.下面的代码位于generate方法的开头,并将我需要处理的所有类放在clazzes列表中

TypeOracle oracle = context.getTypeOracle();
JClassType markerInterfaceType = oracle.findType(MY_PARENT_CLASS.class.getName());
List<JClassType> clazzes = new ArrayList<JClassType>();
for (JClassType classType : oracle.getTypes()) {
  if (!classType.equals(markerInterfaceType)
      && classType.isAssignableTo(markerInterfaceType)) {
    clazzes.add(classType);
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码已经保存了一年多,但自上周以来,似乎发电机没有考虑到几个等级.

经过一番挖掘,我发现那些类甚至不在返回的列表中 oracle.getTypes()

  • 那些被忽略的类不是新创建的类(有些类在几个月内保持不变)
  • 据我所知,没有办法区分将被忽略的类与任何其他类
  • 我们的gwt版本没有升级(我们中的一些人使用2.5.0,其他人使用2.5.1)
  • 这些类使用的包也没有升级
  • oracle.findType(MISSING_CLASS.class.getName()) 回报 null
  • 问题只出现在某些人身上,但不会出现在同一个课程上
  • 重命名有问题的类似乎可以解决问题

我最好的猜测是我在某处有缓存问题,但我不知道在哪里看.

java gwt types code-generation

8
推荐指数
1
解决办法
529
查看次数

如何进行CMake重新配置取决于自定义文件?

我在CMake下有一个项目,其中一些文件是从XML文件生成的python生成器.我无法在CMakeLists.txt中指定此生成器生成的所有文件,因此我使用文件globbing.

问题是当我更新我的XML文件或生成器源(它们在同一个存储库中)时,我希望重新配置我的构建系统,以便在重建代码时考虑更改的文件(例如通过make).

是否有可能使CMake处理一些文件,比如它处理CMakeLists.txt文件并使它在更改这些文件时重新生成构建系统?

code-generation cmake

8
推荐指数
2
解决办法
2545
查看次数

是否有 Cypress 测试工具的代码生成器

我一直在研究Cypress测试工具。我有巨大的前端流程要测试。编写这么多 JS 代码会很困难。

所以我想知道是否有记录/生成代码测试的代码生成器。

我知道一个工具Snaptest - snaptest.io 。但是,此工具仅在 NightWatchJS 和 Chromeless 中生成代码。赛普拉斯框架被禁用。

我发现了这个 - https://github.com/cypress-io/generator-node-cypress 但我不确定这是做什么的。

所以我想知道是否有任何备用记录器/生成器来生成在 Cypress 中使用的代码。

建议?谢谢 。

javascript testing code-generation cypress

8
推荐指数
2
解决办法
5897
查看次数

我应该将 Flutter/Dart 中生成的代码提交到 VCS

我正在使用 Flutter 的 Retrofit ( https://pub.dev/packages/retrofit ) 和 Json Serialized ( https://pub.dev/packages/json_serializing ) 库,它们都会创建生成的代码文件,这些文件最终会出现在其他文件中的源代码。生成的x.g.dart文件是否应该提交到 VCS 中?

在正常的 Android/Java 开发中,生成的文件会进入您不提交的特殊 gen/out/build 文件夹,并且 IDE 通常非常擅长隐藏这些文件。但由于 Flutter 在源代码中生成它们,我不知道如何处理它们。

git code-generation dart flutter

8
推荐指数
2
解决办法
3855
查看次数

无法将本机 .dll 引用添加到源生成器项目

您可以在https://github.com/myblindy/GrimBuilding/tree/efcore(分支)找到完整的源代码efcore。

我知道源生成器无法自动从 nuget 包中获取依赖项,并且您必须使用笨重的解决方法才能使其正常工作,而我已经这样做了。这是我的源生成器项目:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <LangVersion>preview</LangVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.0.0-1.final" PrivateAssets="all" />
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" PrivateAssets="all" />
    <PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.*-*" GeneratePathProperty="true" PrivateAssets="all" />
    <PackageReference Include="Microsoft.Data.Sqlite.Core" Version="6.*-*" GeneratePathProperty="true" PrivateAssets="all" />
    <PackageReference Include="SQLitePCLRaw.lib.e_sqlite3" Version="2.*-*" GeneratePathProperty="true" PrivateAssets="all" />
    <PackageReference Include="SQLitePCLRaw.provider.e_sqlite3" Version="2.*-*" GeneratePathProperty="true" PrivateAssets="all" />
  </ItemGroup>

  <PropertyGroup>
    <GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
  </PropertyGroup>

  <Target Name="GetDependencyTargetPaths">
    <ItemGroup>
      <TargetPathWithTargetPlatformMoniker Include="$(PKGSQLitePCLRaw_bundle_e_sqlite3)\lib\netstandard2.0\SQLitePCLRaw.batteries_v2.dll" IncludeRuntimeDependency="false" />
      <TargetPathWithTargetPlatformMoniker Include="$(PKGSQLitePCLRaw_provider_e_sqlite3)\lib\netstandard2.0\SQLitePCLRaw.provider.e_sqlite3.dll" IncludeRuntimeDependency="false" />
      <TargetPathWithTargetPlatformMoniker Include="$(PKGSQLitePCLRaw_lib_e_sqlite3)\runtimes\win-x64\native\e_sqlite3.dll" IncludeRuntimeDependency="false" />
      <TargetPathWithTargetPlatformMoniker Include="$(PKGMicrosoft_Data_Sqlite_Core)\lib\netstandard2.0\Microsoft.Data.Sqlite.dll" IncludeRuntimeDependency="false" />
    </ItemGroup>
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

由于也没有任何传递支持,因此我Microsoft.Data.Sqlite一一添加了每个嵌套包,生成了它们的路径属性并使用TargetPathWithTargetPlatformMoniker. 这一切都有效,直到我到达 …

c# code-generation roslyn-code-analysis

8
推荐指数
1
解决办法
893
查看次数

如何在 VS Code 中调试 flutter build_runner 构建?

问题陈述:

我正在使用build_runner包构建一个代码生成器。

我运行flutter pub run build_runner build来执行我的代码生成器。

问题:

如何flutter pub run build_runner build使用断点进行调试?

类似问题:

如何在intellij idea中以调试模式运行flutter'packages pub run build_runner build'?

code-generation build dart flutter build-runner

8
推荐指数
1
解决办法
2869
查看次数