标签: code-generation

什么是编译的好资源?

不耐烦的总结:我正在寻找关于为公共语言结构生成代码但不解析的好参考.

我对编程语言很感兴趣,并尝试尽可能多地阅读文献.但是大多数都是从功能和理论的角度来讨论这个话题,我觉得很难理解,更不用说实现这些想法了.

所以问题是; 您建议哪些资源以更加迫切和实用的方式涵盖主题的编程语言实现?

例如,我发现" Lua 5.0的实现 "论文非常有启发性.

请注意,我不是在寻找有关解析或标记的文章.

language-features code-generation compiler-theory

4
推荐指数
1
解决办法
1553
查看次数

什么是代码生成技术?

我正在生成C++代码,看起来它会变得非常混乱,即使我的简单生成类已经有很多特殊情况.以下是现在的代码:http://github.com/alex/alex-s-language/tree/local%2Fcpp-generation/alexs_lang/cpp.

c++ python code-generation

4
推荐指数
3
解决办法
2549
查看次数

从XSD架构生成C#代码时,如何让数组的名称不是"Items"?

我正在开发一个项目,该项目必须连接到一些古老的Web服务,这些Web服务将请求和响应的一些分层数据打包成单个分层XML字符串.

我一直在使用xsd.exe从示例请求和响应XML片段生成XSD,在必要时修改它们以获得最佳定义,并再次使用xsd.exe生成C#对象.然后,调用web服务的管理器可以将这些强类型请求对象作为参数,将它们序列化为字符串以进行调用,将响应作为字符串返回,将它们反序列化为强类型响应对象并返回它们.

如果我有一个字符串列表,我可以有一个有效的XSD,它认为它是一个复杂类型的无界xs:选择xs:string元素,然后它会反序列化为一个字符串数组,这很好,处理起来很简单.令人烦恼的问题是,由于某种原因,似乎没有任何方法可以让它调用除" Items " 之外的任何字符串数组.无论什么我添加到架构,我不能让XSD.EXE写任何其他名称.

这是一个示例XSD架构:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="AccountStatusRequest" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="AccountStatusRequest">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded" id="AccountRowIDs">
                <xs:element nillable="true" type="xs:string" id="AccountRowID" name="AccountRowID"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

由此产生的课程:

public partial class AccountStatusRequest {

    private string[] itemsField;

    [System.Xml.Serialization.XmlElementAttribute("AccountRowID", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
    public string[] Items {
        get {
            return this.itemsField;
        }
        set {
            this.itemsField = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试将intellisense中的每个msdata:属性添加到选择和内部元素中,没有任何区别.

仅仅为了论证,我为该complexType添加了一些额外的类似选择,看看是否会强制它使用字符串数组的名称,而是它给了我Items,Items1,Items2 ......

我真的不希望它必须是一个只拥有字符串的自己类型的数组,但我也真的不想留下它叫做" Items ",没有xml注释(有没有人知道如何添加THOSE到一个xsd?),它应该有一个更具描述性的名称.我绝对不能只是手动将其更改为Web服务模式更改时所需的工作流程,即更改XSD然后从中重新生成类.

这似乎是xsd.exe应该支持的另一个东西.有什么我想念的吗?我应该以某种方式采取不同的方法吗?或者是否有一种替代工具可以用于此而不是跛脚?

.net attributes xsd code-generation web-services

4
推荐指数
2
解决办法
2036
查看次数

从java程序动态生成java类

在我的项目的构建(编译)时,我需要为java类进行代码生成.生成的java类是一个带有一组getter和setter的java bean类.在构建时,我得到类的名称和变量的名称.所以我需要做的是从我拥有的信息中动态生成java bean.

例如.在编译时我得到了以下数据.

class-name=Test
variable-name=aaa
Run Code Online (Sandbox Code Playgroud)

所以generate类应该如下所示.

public class Test {
   public String aaa;
   public void setVar(String str) {
      this.aaa = str; 
   }
   public String getVar(){
      return this.aaa;
   }
}
Run Code Online (Sandbox Code Playgroud)

当我搜索一个我可以使用的工具时,我发现Arch4j [1]很有趣,但问题是它与Apache 2.0许可证不兼容.我正在寻找一个与Apache 2.0许可证兼容的项目/工具.

如果有人能给我一些关于如何做到这一点的见解,我将不胜感激.

[1] - http://arch4j.sourceforge.net/components/generator/index.html

java code-generation

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

在SIGILL处理程序中,如何跳过违规指令?

我要进行JIT代码生成,并且我想在流中插入无效的操作码以执行一些元调试.一切都很好,直到它达到指令,此时东西进入无限循环的非法指令信号处理程序和返回.

有什么方法可以设置简单地跳过错误的指令吗?

linux jit code-generation signals

4
推荐指数
1
解决办法
2018
查看次数

GCC汇编代码生成错误和解决方法

GCC 4.5.2(在Ubuntu 11.10 x64上,但编译为32位)生成无效的汇编代码,我很好奇是否可以在不更改代码的情况下修复,只需应用选项或类似的东西即可.请注意,优化已经是-O0.

我有两个功能:

inline long Class::Get()
{
    long v = *(long*)(m_p);
    m_p += 4;
    return v;
}
inline void Class::Command()
{
    m_p += Get();
}
Run Code Online (Sandbox Code Playgroud)

GCC 4.5.2生成此汇编代码:

 9840       m_p += Get();
f689eff5:   mov 0x8(%ebp),%eax
f689eff8:   mov 0xd4(%eax),%eax
f689effe:   mov %eax,%esi
f689f000:   mov 0x8(%ebp),%eax
f689f003:   mov %eax,(%esp)
f689f006:   call 0xf66116a0
f689f00b:   lea (%esi,%eax,1),%edx
f689f00e:   mov 0x8(%ebp),%eax
f689f011:   mov %edx,0xd4(%eax)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它将m_p值存储在%esi中,然后使用lea将返回值添加到它.但是 :: Get()也会改变m_p!海湾合作委员会似乎并未意识到这一点.因此,错误m_p不正确(比预期少4个字节),因为%esi中的值已过时.

我可以使用它修复它

inline void Class::Command()
{
    long v = Get();
    m_p += v;
}
Run Code Online (Sandbox Code Playgroud)

但我只是想知道我是否可以在不更改代码的情况下应用一些pragma或smth,以使bug消失.至于gcc版本,我坚持使用给定的版本.

c++ assembly gcc code-generation

4
推荐指数
1
解决办法
313
查看次数

从EF模型 - 第一个图生成类

当我在Visual Studio 2012中创建一个新的ADO.NET实体数据模型时,它为我提供了一个免费的EF 5.x DbContext生成器代码生成项.换句话说,如果我在解决方案资源管理器中展开我的edmx项目,我会看到一对.tt文件,理论上应该神奇地生成包含我的POCO类和我的DbContext类的.cs文件.

我的问题是我无法说服Visual Studio实际创建类.Model1.tt包含一个空的Model1.cs,而Model1.Context.tt包含一个DbContext对象,但它不包含与我的实体关联的DbSet <>集合.

如果我从我的解决方案中删除了两个.tt项目,然后右键单击设计器表面,选择Add Code Generation Item,并添加一个EF 5.x DbContext Generator,然后一切正常,我得到生成的类.

我已经确认我删除的*.tt文件实际上与我添加的那些文件相同.

任何智慧的话?这是一个错误,还是我错过了什么?

短发

asp.net code-generation entity-framework visual-studio-2012

4
推荐指数
1
解决办法
4091
查看次数

用于scala的JavaScript源代码生成库

我在scala中寻找一个从抽象语法树生成JavaScript的库.我想在最终生成JavaScript的编译器中使用它,我不想自己实现漂亮的打印部分.

javascript code-generation scala abstract-syntax-tree

4
推荐指数
1
解决办法
751
查看次数

如何将命令行代码生成器添加到Visual Studio?

我正在开发一个项目,该项目使用代码生成来使用基于文本的描述中的命令行工具生成C#类.我们将开始使用这些javascript描述.

目前生成这些类然后签入,但是,我希望能够自动生成代码,以便将任何更改传播到两个版本.

手动运行的步骤是:

servicegen.exe -i:MyService.txt -o:MyService.cs
Run Code Online (Sandbox Code Playgroud)

当我构建时,我希望MSBuild/VS首先生成CS文件然后编译它.可以通过修改csproj,或许使用MSBuild任务来实现这一点Exec,DependentUpon&AutoGen?

msbuild command-line code-generation visual-studio-2010

4
推荐指数
2
解决办法
1469
查看次数

如何自动生成C++函数?

我想编写一个c ++矩阵操作代码,某些函数的某些操作是相同的.我想知道是否有一些方法可以合并它们?例如:

void add1(vector<vector<double> > &m){
    for(int i = 0; i < m.size(); ++i){
        for(int j = 0; j < m[i].size(); ++j){
            m[i][j] += 1.0;
        }
    }
}

void minus1(vector<vector<double> > &m){
    for(int i = 0; i < m.size(); ++i){
        for(int j = 0; j < m[i].size(); ++j){
            m[i][j] -= 1.0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两段代码几乎相同.如何避免重写两次?是否有类似模板的东西可以自动生成代码?

c++ generics templates code-generation

4
推荐指数
1
解决办法
227
查看次数