我正在为Java构建针对Windows的x86-32(IA32)处理器的编译器/汇编器/链接器.
高级概念(我没有任何"源代码":没有语法或词汇翻译,所有语言都是常规的)被翻译成操作码,然后将其包装并输出到文件中.翻译过程有几个阶段,一个是常规语言之间的翻译:最高级别的代码被翻译成中级代码,然后被翻译成最低级别的代码(可能超过3个级别).
我的问题如下; 如果我有更高级别的代码(X和Y)转换为较低级代码(x,y,U和V),那么这样的翻译的一个例子是,在伪代码:
x + U(f) // generated by X
+
V(f) + y // generated by Y
Run Code Online (Sandbox Code Playgroud)
(一个简单的例子)在哪里V是相反的U(与堆栈推送U和pop相比V).这需要"优化"为:
x + y
Run Code Online (Sandbox Code Playgroud)
(基本上删除"无用的"代码)
我的想法是使用正则表达式.对于上面的情况,它将是一个看起来像这样的正则表达式:x:(U(x)+V(x)):null,意思是所有x查找U(x)后跟V(x)和替换null.想象一下更复杂的正则表达式,用于更复杂的优化.这应该适用于所有级别.
你有什么建议?什么是优化和生产快速x86组件的好方法?
我正在开发一个符合某些与SQL实现相关的公司标准的项目.具体来说,只能通过存储过程访问所有SQL Server内容.(没有ORM或LINQ.)
我们需要的80%或更多可以通过基本的CRUD(CREATE,READ,UPDATE,DELETE)类型的过程来处理,该过程应该相当简单.但是,到目前为止,我找不到能够生成这些相当简单的"基本"存储过程的现有工具.
那么,有人能指出我可以用来生成大部分所需程序的工具吗?优选地,允许对过程进行一些定制,例如将语句包装在基本BEGIN/END TRY构造中.
谢谢.
好吧,也许我第一次尝试提问这个问题太混乱了.所以,我们再来一次......
在一个带有可变数量参数的函数中,比如printf,当你传递一个struct时,你应该期望生成什么样的代码?
基于这段代码,我问这个问题:
#include <stdio.h>
struct edge{
int v1, v2;
};
int main(void){
struct edge edges;
edges.v1=5;
edges.v2=20;
printf("'%d'\n", edges);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的Windows框中编译时,它传递2个整数参数:
.file "simple_test_case2.c"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "'%d'\12\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $32, %esp
call ___main
movl $5, 24(%esp)
movl $20, 28(%esp)
movl 24(%esp), %eax
movl 28(%esp), %edx
movl %eax, 4(%esp) …Run Code Online (Sandbox Code Playgroud) 我想创建一个Objective-C应用程序,它允许您在运行时指定类实现.
我希望用户输入一些代码(代码的正确性现在超出了范围).当用户完成后,我想创建一个类型化的代码类并在应用程序中使用它.
所以我想在应用程序的运行时动态添加代码.这可能吗?如果是这样,我怎么能实现这一目标?如果没有,为什么不,并且有没有其他选择来创造我想创造的相同效果?
谢谢.
鉴于Perl 5不符合BNF,我对如何思考这个问题感到茫然.有人可以提出一些建议让我以正确的方式考虑这个问题吗?
我希望在构建项目时自动执行一个.tt文件,而不是其他文件.是否可以在特定的.tt文件而不是项目范围上设置TransformOnBuild属性?或另一种方法来实现这一目标?
如何使用llvm生成本机代码?
如果可能,可以使用Haskell绑定吗?
upd:我的意思是生成不在内存中的代码,我的意思是如何生成代码,例如将其保存到文件中.
编译器如何生成单独文件的二进制代码?对GCC源代码中的哪些文件的引用会对此有所帮助.我想知道的是编译器(特别是gcc)究竟是如何从ASM生成机器代码的?
我正在玩roslyn generation,它工作正常,除非不是这样。例如,我想使用C#7.0功能throw expression。但是我在中没有看到任何相应的方法SyntaxFactory。
现在可以生成类似的东西var foo = bar ?? throw new Exception();吗?由于NullCoalesceExpression扩展ExpressionSyntax,而ThrowStatement显然是一个声明。
我试图从头开始构建它(这就是我的意思custom expression),但是我只有多个例外Unexpected SyntaxKind。
我正在基于模式生成C++代码.存在实体,每个实体包含具有相应数据类型的每个属性的属性.现在问题是这些属性中的一些是"可选的",这意味着它们不必是类声明的一部分.但是,在C++中,某些东西要么是类的成员,要么不是类的成员,没有诸如"可选数据成员"之类的概念.
实体将是类名,属性将是类成员.我不确定如何表示标记为"可选"现有C++概念的属性.
code-generation ×10
haskell ×2
.net ×1
assembly ×1
c ×1
c# ×1
c#-7.0 ×1
c++ ×1
class ×1
gcc ×1
llvm ×1
objective-c ×1
optimization ×1
roslyn ×1
runtime ×1
schema ×1
sql-server ×1
struct ×1
t4 ×1