找到相关内容 51
自己动手开发编译器(九)CPS风格的解析器组合子
上回我们用函数式编程的方法,结合Linq语法,建立了一套解析器组合子方案,并能成功解析自定义文法的输入字符串。但是,上次做成的解析器组合子有个重要的功能没有完成——错误报告。作为编程语言的语法分析器,不能在遇到语法错误的时候简单地返回null,那样程序员就很难修复代码中的语法错误。我们需要的是准确报告语法错误的位置,更进一步,是程序中所有的语法错误,而不仅仅是头一个。后者要求解析器具有错误恢复的能
http://cyqdata.com/cnblogs/article-detail-41186 
编译工具Reflector下载(集成FileGenerator和FileDisassembler)
Reflector是一款比较强大的反编译工具,相信很多朋友都用过它,但reflector本身有很多局限性, 比如只能一个一个的查看方法等,但幸好reflector支持插件功能目前网上有很多reflector的插件,本人找取了两个应用范围很广, 并且广受好评的插件:Reflector.FileDisassembler和Reflector.FileGenerator和Reflector进行了整合,放在
http://cyqdata.com/cnblogs/article-detail-40835 
自己动手开发编译器(八)用Linq编写解析器组合子
上回我们说到手写递归下降语法分析器。手写递归下降的方式是目前很多编译器采用的方式,如果你想写一个商业质量的编译器,这是首选的方法。但是,一个完善的递归下降解析器需要的代码量也不少,如果要进行错误报告、错误恢复等等那代码量就更大了。作为懒人,我们有时想要一些小型语言的解析器,最好写起来像直接写文法的产生式一样,最好连错误报告和错误恢复也一并自动解决,可能吗?在过去很长一段时间,人们采用的方法是使用解
http://cyqdata.com/cnblogs/article-detail-40824 
在 Windows 7 下使用 Android NDK r5c 编译 FFmpeg 0.7.1
在代号是 “Love”的 FFmpeg 0.8 正式版几个小时之后,代号为 “Peace”FFmpeg 0.7.1 也发布了。没想到啊,我还以为直接是从 0.7 RC1 升到 0.8,不会再有 FFmpeg 0.7.x 的版本了呢。爱与和平,呵呵,原来如此,0.7 RC1 的代号就是 “Love and Peace”。 因为之前已经写了 在 Mac OS X 下使用 Android NDK r5
http://cyqdata.com/cnblogs/article-detail-40798 
从零开始,学习windows编程(8)--自己动手,编译CRT
翻开对应VC中的lib目录,是可以看到CRT的lib文件的,我电脑上面路径是“d:\Program Files\Microsoft Visual Studio\VC98\Lib\”,大家可以自己找一下自己的路径。经过上面的文章,我们对它已经有了一定的了解,使用它当然没问题了。那作为程序员,是不是还想看看它是怎么生成的呢?这里,就是讲如何来生成一个CRT库。 安装CRT源码
http://cyqdata.com/cnblogs/article-detail-40738 
内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十)
     这里回到文章主目录 [置顶]内存数据库内核开发探索      之前由于考虑到使用Page的内存和磁盘互换的机制实现了B-tree做为数据库的键值索引,在真实的生产环境下2000万以上的数据建立索引会使到B-tree层数增多,效率明显下降,在运算工程中使用AIX大型机都用了数天才将2000多万的数据生成出来,效果非常不理
http://cyqdata.com/cnblogs/article-detail-40663 
在 Mac OS X 下使用 Android NDK r5b 编译 FFmpeg 0.8 正式版
今天上午 ffmpeg.org 发布了代号为 love 的 FFmpeg  0.8 正式版。 新版本相比之前的 0.6.x 版有很多改变,使用我之前写的《在 Ubuntu 下使用 Android NDK r4b 编译  FFmpeg  0.6.3 正式版》中给出的方法已经无法编译这个版本。   我想我应该重新写一篇随笔给出新版本的编译方法 。 我的这
http://cyqdata.com/cnblogs/article-detail-40617 
自己动手开发编译器(七)递归下降的语法分析器
上回我们说到语法分析使用的上下文无关语言,以及描述上下文无关文法的产生式、产生式推导和语法分析树等概念。今天我们就来讨论实际编写语法分析器的方法。今天介绍的这种方法叫做递归下降(recursive descent)法,这是一种适合手写语法编译器的方法,且非常简单。递归下降法对语言所用的文法有一些限制,但递归下降是现阶段主流的语法分析方法,因为它可以由开发人员高度控制,在提供错误信息方面也很有优势。
http://cyqdata.com/cnblogs/article-detail-40507 
自己动手开发编译器(六)上下文无关语言和文法
上回我们已经学习了语法分析第一阶段——词法分析的原理和工具,介绍了正则表达式、正则语言和DFA等工具。今次我们要开始涉及编译器前端最重要的阶段——语法分析。简单而言,这一步就要完整地分析整个编程语言的语法结构。上回说到词法分析的结果是将输入的字符串分解成一个个的单词流,也就是诸如关键字、标识符这样有特定意义的单词。一种完整的编程语言,必须在此基础上定义出各种声明、语句和表达式的语法规则。观察我们所
http://cyqdata.com/cnblogs/article-detail-40290 
自己动手开发编译器(一)编译器的模块化工程
本系列的第一篇,我想概述一下编译器的构造,同时帮助大家了解编译器中各个组成部分的用途。想必大家看别的编译原理书籍,大都在第一章或者序言之类的地方,将编译器分成许多模块,然后每一个模块负责编译的特定阶段,最后串起来组成完整的编译器。比如下面这张图就是虎书(Modern Compiler by Andrew W. Appel)第一章中出现的编译器阶段示意图: 那么,为什么要将编译器拆成一个个阶段,一
http://cyqdata.com/cnblogs/article-detail-39463 
自己动手开发编译器(零)序言
好久没写博客了,一来是自己懒,二来是最近一段时间都没有做什么自己认为可以分享的东西。这几天刚好重拾了一个一直打算做但没做的编译器类库,算是积累了一点小小的经验吧。本来我已经发到了Github上,也在微博上零星介绍了一些,但是我最终意识到,如果不写一个详细的文档,别人就不能容易地学习、了解和使用它。甚至于我自己也可能会把这次研究出来的小小成果给忘了。所以,必须下决心动一动笔头,也算是对老长时间不些博
http://cyqdata.com/cnblogs/article-detail-39423 
浅谈代码的执行效率(2):编译器的威力
关于算法的选择,我谈到其理论上的复杂度,并不直接反映出效率。因为在实际运用时,数据的规模,特征等等都会涉及到算法的实际效果。一个时间复杂度低的算法并不代表任何情况下的效率都高。这是“实际”和“理论”的区别之一。现在我打算来谈一下另一个比较“实际”的东西:编译器对于程序效率的影响。   那么我们先来看这样一段代码,假设有一个保存
http://cyqdata.com/cnblogs/article-detail-39157 
第二章:C#.NET面向对象—— 命名空间、编译单元和程序集
   C#通过名字空间(namespace)来组织程序中的各种类型,程序集是这些类型的物理容器,它包含具体的实现代码。所有的C#都具备名字空间,而且都具有一个全局名字空间。    除名字名字外,C#中还有很多种声明空间,如类型声明空间,语句声明空间等。   <一> 自定义名字空间    通过关键字namespace来
http://cyqdata.com/cnblogs/article-detail-38903 
我也要学C语言-第十二章:编译预处理——带参数的宏
带参数的宏   为了进一步扩大宏的应用范围,在定义宏的时候,还可以带参数 一般形式:#define 标识符(参数表) 字符串   带参数宏的作用:在编译预处理时,将源程序中所有标识符替换成字符串,并且将字符串中的参数用实际使用的参数替换。 例子:#define S(a,b) (a*b)/2   上面这个例子则源程序中如果使用了S(3,4),在编译预处理时就会将其替换为(3*4)/2 代码事例:
http://cyqdata.com/cnblogs/article-detail-38576 
编译Silverlight项目
在互联网上,每天都会有很多Silverlight项目发布,有的是开源,有的只是为了展示。在Silverlight学习的初期,多数都需要模仿学习,所以,发现一个Silverlight项目,能够查看其中的源代码是最好不过了。但是,Silverlight发布,只是发布资源包XAP,而所有资源都在这个XAP文件中,该如何查看其中的资源和代码呢?下面我将演示反编译的方法,演示中我将用Silverlight.
http://cyqdata.com/cnblogs/article-detail-38558 
我也要学C语言-第十二章:编译预处理——不带参数的宏
哈哈!今天上午学了不带参数的宏!感觉特好玩。怎么好玩的,后面你就知道啦!    C语言的宏是用来间接的操作编译环境的。   C语言在对源程序进行正常编译之前,先对一些特殊的预处理命令作解释,产生一个新的源程序,之后再进行通常的编译(要得到中间文件加参数/p)。   在源程序中,为了区分预处理命令和一般的C语句的不同,所有预处理命令行都以符号#开头并且宏一定要大写哦,因为大家都是这样做的,并且结尾不
http://cyqdata.com/cnblogs/article-detail-38407 
我也要学C语言-第二章:第一个C程序的编译初解
上一次我学习了在VC6.0下成功的运行了第一个C程序,实在是感觉到兴奋.但是关于编译,链接等步骤,VC6.0已经傻瓜化的帮我做了,我感觉到确实很方便,但是这样才给我带来了1个问题,就是其中的步骤只是看了书有所了解,自己呢,没有实践过,所以感觉还不是自己的东西。所以我决定自己用记事本写个程序,但是自己动手实现编译,链接等VC帮我做了的事情。   首先,我用记事本写上那个helloworld程序。
http://cyqdata.com/cnblogs/article-detail-37859 
ACE在windows平台下的编译安装
今天晚上打算在windows平台上编译安装ACE,特记录此过程,希望与大家共勉. 一、准备工作 windows系统:windows xp             IDE:Visual Studio Team System 2008(即Version 9版本)          &
http://cyqdata.com/cnblogs/article-detail-37682 
libmeegotouch编译安装教程
1.qt sdk安装     Meego touch安装需要qt的版本为4.7或者以上,如果你没有安装qt或者你的版本过低的话,那可以前往以下链接进行下载,  http://qt.nokia.com/developer/qt-qtcreator-prerelease,下载Pre-Releases版本,完成后解压,切换到代码目录。 
http://cyqdata.com/cnblogs/article-detail-37636 
OO 中的继承分析:主要分析在编译和运行过程中 子类、父类 的字段和方法以及实例化时候在内存中分配 和 执行的先后,以及两个原则
首先给出部分代码,由此来分析一下运行过程中对象、字段的创建过程,和编译过程中方法列表的创建过程。 View Code public class Animal { public virtual void Eat() { Console.WriteLine("Animal Eat"); } public vi
http://cyqdata.com/cnblogs/article-detail-36743