标签: compiler-construction

解析.py文件,读取AST,修改它,然后写回修改后的源代码

我想以编程方式编辑python源代码.基本上我想读取一个.py文件,生成AST,然后写回修改过的python源代码(即另一个.py文件).

有一些方法可以使用标准的python模块解析/编译python源代码,例如astcompiler.但是,我不认为它们中的任何一个都支持修改源代码的方法(例如删除此函数声明),然后回写修改python源代码.

更新:我想这样做的原因是我想为python 编写一个Mutation测试库,主要是通过删除语句/表达式,重新运行测试和查看什么中断.

python compiler-construction abstract-syntax-tree

156
推荐指数
9
解决办法
5万
查看次数

编写C#编译器的语言是哪种?

我查看了http://referencesource.microsoft.com/上的源代码,看来所有源代码都在C#中.

我还查看了新的C#编译器平台(Roslyn)的源代码,它也在C#中.怎么可能?C#语言编译器是用C#编写的吗?还是我错过了一些明显的东西?如果C#编译器是用C#编写的,那么它是如何工作的?

c# compiler-construction roslyn

144
推荐指数
3
解决办法
2万
查看次数

array [100] = {0}如何将整个数组设置为0?

编译器如何填充值char array[100] = {0};?它背后的魔力是什么?

我想知道内部编译器如何初始化.

c c++ compiler-construction

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

TargetedPatchingOptOut:"对整个NGen图像边界内联的性能至关重要"?

使用反射器经历了一些框架类,并注意到许多方法和属性具有以下属性

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
Run Code Online (Sandbox Code Playgroud)

我很确定我在其他地方也看到了上述评论,从未跟进过.

有人可以告诉我这在C#和其他任何背景下意味着什么?

.net c# compiler-construction ngen

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

sjlj vs dwarf vs seh有什么区别?

我找不到足够的信息来决定我应该使用哪个编译器来编译我的项目.模拟一个过程的不同计算机上有几个程序.在Linux上,我正在使用GCC.一切都很棒.我可以优化代码,它可以快速编译并使用不那么多的内存.

我用MSVC和GCC编译器做自己的基准测试.后来一个产生稍快的二进制文件(对于每个子体系结构).虽然编译时间远远超过MSVC.

所以我决定使用MinGW.但是在MinGW中找不到有关异常处理方法及其实现的任何解释.我可以为不同的操作系统和体系结构使用不同的发行版.

注意事项:

  • 编译时间和内存对我的使用并不重要.唯一重要的是运行时优化.我需要我的程序足够快.慢编译器是可以接受的.
  • 操作系统:Microsoft Windows XP/7/8/Linux
  • 架构:英特尔酷睿i7/Core2 /以及运行XP:P的非常老的i686

c++ compiler-construction mingw cpu-architecture mingw-w64

135
推荐指数
2
解决办法
9万
查看次数

-ObjC链接器标志有什么作用?

我有一个可以使用和不使用链接器标志的应用程序.但是,如果没有链接器标志,则在向视图添加数据时会出现非常不同的行为.

compiler-construction iphone objective-c ios

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

递归函数可以内联吗?

inline int factorial(int n)
{
    if(!n) return 1;
    else return n*factorial(n-1);
}
Run Code Online (Sandbox Code Playgroud)

在我阅读本文时,发现如果编译器没有正确处理上述代码会导致"无限编译".

编译器如何决定是否内联函数?

c c++ compiler-construction

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

错误:可写原子属性无法将合成的setter/getter与用户定义的setter/getter配对

我最近尝试编译一个较旧的Xcode项目(曾经编译得很好),现在我看到了很多这种形式的错误:

error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter

导致这些错误的代码模式总是如下所示:

// Interface:

@property (retain) NSObject * someProperty;

// Implementation:

@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
    //..
}
Run Code Online (Sandbox Code Playgroud)

我可以看到为什么会生成错误.我告诉编译器合成我的属性访问器(getter和setter),然后立即手动覆盖setter.那段代码总是闻到一点点气味.

那么,这样做的正确方法是什么?如果我使用@dynamic而不是@synthesize,我将不得不写入getter.这是唯一的方法吗?

compiler-construction xcode properties objective-c

127
推荐指数
3
解决办法
3万
查看次数

如何驱动C#,C++或Java编译器在编译时计算1 + 2 + 3 + ... + 1000?

在最近的一次采访中,我被问到一个非常奇怪的问题.面试官问我如何使用编译器功能计算1 + 2 + 3 + ... + 1000.这意味着我不允许编写程序并执行它,但我应该编写一个程序,可以驱动编译器在编译时计算这个总和,并在编译完成时打印结果.作为提示,他告诉我,我可能会使用编译器的泛型和预处理器功能.可以使用C++,C#或Java编译器.有任何想法吗???

这个问题与计算总和无关,这里没有任何循环问题.此外,应该注意,总和应该在编译期间计算.不能使用C++编译器指令打印结果.


阅读更多关于发布的答案,我发现在使用C++模板编译期间解决问题称为元编程.这是Erwin Unruh博士在标准化C++语言过程中偶然发现的一种技术.您可以在元编程的wiki页面上阅读有关此主题的更多信息.似乎可以使用Java注释在Java中编写程序.您可以在下面看看maress的答案.

关于C++的元编程一个很好的书是这一个.如果感兴趣,值得一看.

一个有用的C++元编程库是Boost的MPL 这个链接.

c# c++ java compiler-construction metaprogramming

121
推荐指数
9
解决办法
8407
查看次数

用于Windows的C编译器?

我使用gcc作为我的C编译器在Linux上工作很好但是想要一个Windows解决方案.有任何想法吗?我看过Bloodshed的Dev-C++,但寻找更多选择.

c windows compiler-construction

120
推荐指数
11
解决办法
41万
查看次数