Questions tagged «code-generation»

27
源代码生成是否是反模式?
如果可以生成某些东西,那么那是数据,而不是代码。 鉴于此,对源代码生成的整个想法不是一种误解吗?也就是说,如果有某个东西的代码生成器,那么为什么不将该东西变成一个可以接收所需参数并执行“将要生成的”代码将要执行的正确操作的适当函数呢? 如果这样做是出于性能原因,那么这听起来像是编译器的缺点。 如果要完成两种语言之间的桥梁,那么这听起来像缺少接口库。 我在这里想念什么吗? 我知道代码也是数据。我不明白的是,为什么要生成源代码?为什么不使其成为可以接受参数并对其执行操作的函数呢?

22
自动编程:编写可编写代码的代码
读完《实用程序员》一书后,我发现最有趣的论点之一是“编写代码编写代码”。 我尝试在网上搜索更多有关它的解释或文章,尽管我找到了一些有关该主题的不错的文章,但仍然没有找到任何特定的代码实现或好的示例。 我觉得它仍然不是一个普遍的论点,缺乏文档或者很多人不接受,我想对此有所了解。 您如何看待这个主题?它会真正提高您的生产力吗?在书籍,博客,幻灯片等中,关于该主题有哪些好的资源? 一些代码示例将不胜感激,使我可以更好地理解其实现。 这是有关该主题的Wiki页面,其中包含各种相关的编程技术,例如元编程,生成式编程和代码生成。

6
如果可以内联嵌套函数调用,为什么程序要使用调用堆栈?
为什么不让编译器采用这样的程序: function a(b) { return b^2 }; function c(b) { return a(b) + 5 }; 并将其转换为这样的程序: function c(b) { return b^2 + 5 }; 从而消除了计算机记住c(b)的回信地址的需要? 我认为存储程序并支持其编译所需的硬盘空间和RAM分别增加,这就是我们使用调用堆栈的原因。那是对的吗?

4
我们如何从汇编到机器代码(代码生成)
有没有一种简单的方法可以可视化将代码组装到机器代码之间的步骤? 例如,如果您在记事本中打开有关二进制文件的文件,则会看到机器代码的文本格式表示形式。我假设您看到的每个字节(符号)都是对应的ascii字符,因为它是二进制值? 但是我们如何从汇编程序转换为二进制程序,幕后发生了什么?

2
设计决策-为什么不生成</ p>的<p>?
tl; dr 假设浏览器将正确关闭段落,则一些生成html的广泛使用的程序将仅生成开始段落标签,而不会生成关闭段落标签。 从表面上看,在我看来,浏览器将正确关闭段落的假设是不正确的。我的解释正确吗?更笼统地说,这种决策涉及哪些权衡? 浏览moinmoin源代码时,以下代码行引起了我的注意: # We only open those tags and let the browser auto-close them: _auto_closing_tags = set(['p']) (来源) 在阅读完其余的实现后,我已经使自己确信,是的,的确,当moinmoin为其中一个页面生成html代码时,它将在适当的情况下正确生成段落打开标签,同时有目的地避免任何段落关闭标签(尽管能够做到这一点)。 对于我特定的,相当不寻常的用例,这种行为是不正确的。我很想提交错误报告和/或更改行为。但是,看起来这个设计决定是经过深思熟虑的。我不太熟悉html标准或各种浏览器实现的复杂性,因此无法总体上判断这是否是正确的行为,而且我感觉我本能的纠正/更改此行为的本能可能是被误导了。 这段代码是否对浏览器的实现做出了正确的假设?生成的html有效吗?更一般而言,我可能会在这里失去哪些权衡?

4
自动代码生成器
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我的一位同事喜欢使用自动代码生成器,该代码生成器会创建大量的文档,这些文档记录不善,而且很难维护。 为了减少创建时间,使用代码生成器的成本值得进行维护吗?

2
语言开发框架应该多么容易使用?
这是一系列问题的一部分,这些问题集中于一个称为抽象项目的项目,该项目旨在以框架的形式抽象语言设计中使用的概念。 可以在此处查看与它相关的与结构化类型相关的另一个页面。可以在此处找到与有关框架和适当发布位置的查询相关的元主题。 使用语言开发框架应该有多容易? 我编写了大规模的代码生成框架,其中还包括将结果发送到特定语言的编译器的功能。易用性主题来自这样一个框架示例:CodeDOM或代码文档对象模型。 它是由Microsoft编写的框架,描述了常见的代码结构,但通常忽略了很多(表达强制),并且在表示某些结构时趋于抽象,完全根据您的工作发出错误的代码:当使用的类型是通用接口时,CodeDOM不能很好地处理PrivateImplementationTypeon CodeMemberMethod。CodeDOM是我编写第一个代码生成器的最初原因。 为了简化框架,我正在尝试做的一件事是减少要做某件事所需的工作量,并着重于动作与构成这些动作的特定类型。 这是我正在编写的框架的并行比较: //Truncated... /* * * From a project that generates a lexer, this is the * state-&gt;state transition character range selection logic. * */ var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference())); //... char start = rangeElement.B.Value.Start; char end = rangeElement.B.Value.End; /* * * 'start' …

5
使用编译时值参数生成Java类
考虑一个类实现相同的基本行为,方法等的情况,但是该类可能存在多种不同版本以用于不同用途。在我的特定情况下,我有一个向量(一个几何向量,而不是一个列表),并且该向量可以应用于任何N维欧几里德空间(1维,2维等)。如何定义此类/类型? 在C ++中,这很容易,因为C ++中的类模板可以将实际值作为参数,但是在Java中我们没有那么奢侈。 我可以想到的解决该问题的两种方法是: 在编译时实现每种可能的情况。 public interface Vector { public double magnitude(); } public class Vector1 implements Vector { public final double x; public Vector1(double x) { this.x = x; } @Override public double magnitude() { return x; } public double getX() { return x; } } public class …

3
编写编译器编译器-使用和功能简介
这是一系列问题的一部分,这些问题的重点是抽象项目的姐妹项目,该项目旨在以框架的形式抽象语言设计中使用的概念。姊妹项目称为OILexer,旨在从语法文件构造解析器,而不在匹配项上使用代码注入。 与这些问题相关的其他一些页面,与结构类型相关,可以在这里查看,以及在这里找到易用性。可以在此处找到与有关框架和适当发布位置的查询相关的元主题。 我现在要开始从给定的语法中提取解析树,然后是递归下降解析器,该解析器使用DFA识别前向路径(类似于ANTLR 4的LL(*)),所以我想我会打开它来获得洞察力。 在解析器编译器中,哪种功能比较理想? 到目前为止,这里是实现的简要概述: 范本 提前预测,知道在给定点上什么是有效的。 规则“非文字化”将规则中的文字取下来,并解析它们来自哪个标记。 非确定自动机 确定性自动机 简单的词法状态机,用于令牌识别 令牌自动化方法: 扫描-用于注释:注释:=“ / *” Scan(“ * /”); 减-对标识符有用:标识符:=减(IdentifierBody,关键字); 确保标识符不接受关键字。 编码-将自动化编码为基数N转换的X系列计数。 UnicodeEscape:=“ \\ u” BaseEncode(IdentifierCharNoEscape,16,4); 使用十六进制4转换以十六进制形式对Unicode进行转义。此与:[0-9A-Fa-f] {4}之间的区别是使用Encode进行的自动化将所允许的十六进制值集限制为IdentifierCharNoEscape的范围。因此,如果给它\ u005c,则编码版本将不接受该值。这样的事情有一个严重的警告:谨慎使用。最终的自动化可能非常复杂。 没有实现的是CST生成,我需要调整确定性自动化以继承适当的上下文才能使此工作正常进行。 对于感兴趣的人,我已经上传了T *y♯项目原始形式的漂亮印刷品。每个文件都应该链接到其他文件,我开始链接各个规则来遵循它们,但是这花了太长时间(自动化起来会更简单!) 如果需要更多上下文,请相应地发布。 编辑5-14-2013:我已经编写了代码,可以在给定语言下为状态机创建GraphViz图。 这是AssemblyPart的GraphViz有向图。语言描述中链接的成员在其相对文件夹中应具有rulename.txt,以及该规则的图。自从我发布示例以来,某些语言描述已更改,这是由于简化了语法。这是一个有趣的graphviz图像。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.