compiler-construction相关内容
有关你编译大师,我想编写一个递归下降解析器和我想只用代码做到这一点。从其他一些没有语法词法分析器生成和分析器,不告诉我读龙书,我会围过来,最终。 我想进入有关实现词法分析器和解析器合理简单的langauge相关细节,说CSS。我想这样做的权利。 这可能最终会被一系列的问题,但现在我开始一个词法分析器。对CSS规则,断词都可以在这里找到 。 我觉得我自己写的代码是这样的(希望你可以
..
C#编译器是一种足以给你一个“场从未分配到”如果你忘了初始化一个只读成员是私有或内部,或者如果它被声明的类是内部警告。但是,如果类是公众和只读成员是公共的,受保护的或受保护的内部,那么对你没有警告! 有谁知道为什么吗? 样本代码,演示了在其下发出警告的条件,以及在何种条件下的警告没有发出: 命名空间的Test1 { 类测试1 { #如果TRY_IT 公共只读INT米
..
我知道,在JavaScript中,像这样循环创建一个:的for(int i = 0; I< arr.length;我++)是昂贵的,因为它计算每次数组的长度。 是这种行为在C#中列表和数组,以及昂贵的。或在编译时是最优化?还什么其他语言如Java,这是怎么处理的? 解决方案 这是的不的昂贵在C#。一方面,没有“计算”:查询长度基本上是一个基本操作由于内联。其次,因为(根据其开发商
..
我有嵌入特定的资源文件(名为'Script.xml')编译的.NET程序集。我需要programmically改变了另一个。 在没有从源代码重新编译这个可能吗? 目前,我做搜索的文字,我知道是在文件的效果很好。但我需要做的另一个项目中,我不知道任何的资源文件的内容,我需要找到另一种方法。 的FileStream exe文件=新的FileStream(currentexe,File
..
我已经写在C#中的一些神经网络代码,将使用 SIMD受益支持。 单声道2.2 刚出来的时候,支持SIMD但微软的C#不支持此尚未。 。快乐与我的C#的设置我在想,如果我能在单写一个lib那块从.NET调用它 编辑: 我猜我真正想知道的是它可以通过编译单声道的向下像一个DLL,然后我可以从调用DOTNET。我听说米格尔奥德伊卡萨上的的“http://www.hanselminutes.com
..
如果静态字段初始化时调用构造函数之前完成? 下面的程序提供了看起来不正确对我的输出。 新A() _A == NULL 静态A() 新A() _A一个== 中的代码: 大众A级 { 公共静态字符串_A =(新A())I()。 公开发行A() { Console.WriteLine(“新A()”); 如果(_A == NULL) Consol
..
首先,介绍一下: 此代码: C类 { INT I = 5; 字节[] S =新的字节[I] } 失败,出现以下错误编译: 一个字段初始不能引用非静态字段,方法或属性`C.I“ ReSharper的说,类似的事情:不能在静态情况下访问非静态字段 I 的 $。 b $ b 这是内嵌什么的 C#规范说 - 一个字段初始
..
我继续我的C#编译器编译我的班我的工作。此刻,我几乎在我的课本上的编译器优化的章节结束。 在大多数情况下,我的课本没有考虑到即时编译时,它被写,我很好奇的各种静态,预-jit优化的C#编译器执行与在JIT过程中它做什么? 当我跟人有关编译对CLR,我通常听到这样的话:“大多数该优化是由JIT“完成。 事情像循环展开,常量折叠/传播,指令交织完成预日新通过的C#编译器或抖动处理?如
..
为什么C#编译器甚至没有对这些代码的警告抱怨吗? 如果(这种== NULL) { // ... } 显然病情会的从不满意.. 解决方案 因为你可以的覆盖运算符== 为这种情况下返回true。 公共类Foo { 公共无效测试() { Console.WriteLine(此== NULL); } 公共静态布尔运算符==(foo的,富B
..
我是新来这个,不知道从哪里开始。 我要编译单一个Visual Studio C#项目在Linux上(由命令。线) 的 main.cs文件包含这些引用: 使用系统; :使用System.IO; 使用System.Collections.Generic; 使用System.ComponentModel;使用System.Diagnostics程序 ; 使用System.Dr
..
这是目前可能的C#代码转换成抽象语法树 编辑:澄清;我并不指望编译器生成我AST - “官方”一个解析器就可以了,但我想使用的东西Lambda表达式是不幸的是不会是足够给他们不允许我用的语句机构,这正是我要找的。 解决方案 Syntax树,等等。 SyntaxTree树= SyntaxTree.ParseCompilationUnit( @“C#代码在这里”); VAR
..
无效的主要() { 测试T =新的测试 { A =“A”,$ B $条b B =“b”,//< - 错误后面的逗号 }; } 公共类测试 { 公共字符串A {搞定;组; } 公共字符串B {搞定;组; } } 我觉得在我的代码上面的错字不少。我总是惊讶,编译器似乎并不关心这个。为什么上面没有一个语法errror?是否有任何实际有效的使用? 解决方
..
下面的代码无法编译,指出“名为'ST'的局部变量不能在此范围内声明,因为它会给予不同的意义,这已经是一个'孩子'范围用来表示别的东西'ST', “ 变种L =新的List<串GT;(); l.Find(ST = GT; st.EndsWith(“12”)); 串ST =“为什么失败?” 我明白为什么这是行不通的: 字符串preParent =“”;
..
下面是我用于测试程序。 它打印(如预期): 提出一个 从A事件 抬起B. 从B事件 现在,如果我们改变主要的前两行是: A A =新的B(); B B =新的B(); 该程序将打印:提出一个 抬起B. 从B事件 这也是意料之中的,因为压倒一切的大事隐藏的私人支持字段在基类中,因此,在基类触发的事件是不可见的派生类的客户。 现在我改变了同样的话: B B =新的B()
..
我刚刚碰到的东西pretty怪我:当您使用equals()方法的值类型(如果这种方法还没有被重写,当然),你得到的东西的非常非常的慢 - 字段使用反射相比,一对一!如: 公共结构MYSTRUCT { INT I; } (......) MYSTRUCT S,T; s.i = 0; t.i = 1; 如果(s.Equals(t))的/ * s.i将比较通过反射此处t
..
考虑下面的类, 类Foo { 公共美孚(诠释计数) { / * .. * / } 公共美孚(诠释计数) { / * .. * / } } 以上code是无效,将无法编译。现在考虑下面的code,类Foo&LT; T&GT; { 公共美孚(诠释计数) { / * .. * /
..
每当我们编译我们的C#应用程序时,我们最终有不同的MD5签名EXE文件。我们除了重新编译在同一台机器上,分钟。为什么不一样的源 - code产生相同的输出?有没有办法来解决这个问题? 解决方案 “所以每个组件有: 时间戳,在两个位置 匹配的PDB一个GUID 什么似乎是完全随机的GUID生成的每个编译。 的计数器显示哪些组件的版本是 - 建立只产生在随后的Visual
..
我使用VS2008,想创建一个编译时警告/基于自定义属性上的属性错误(如果可能)。 有两种情况利息我现在: [MyAttribute(typeof运算(MyClass的)] 在哪里MyClass的必须实现的接口。目前我在属性的构造断言这一点,但是这并不能很容易地追查,由于堆栈跟踪的性质:公共MyAttribute(类型MyClassType) { System.
..
什么是JIT编译器和CLR之间的区别?如果您编译code到IL和CLR将运行code,那么什么是JIT在做什么?是如何JIT编译通过增加仿制药的CLR改变? 解决方案 的JIT是CLR的一个方面。 具体来说它负责改变由原始语言的编译器(CSC.EXE用于Microsoft C#例如)制作成机器code原产于当前处理器(和架构CIL / MSIL(以下称为IL)的一部分它暴露了当前进程,例
..
以下code结果的使用未分配的局部变量“numberOfGroups”的: INT numberOfGroups; 如果(options.NumberOfGroups == NULL ||!int.TryParse(options.NumberOfGroups,出numberOfGroups)) { numberOfGroups = 10; } 不过,这code正常工作(虽然 Re
..