2013年7月21日
摘要: 我最近做了一个Windows Azure上面的项目,自己在做的过程中遇到了很多问题。有的是我自己摸索解决,有的是到网上寻找零碎的信息结合起来解决的。我感觉应当把某些解决方法集中一下,方便我以后查阅,也方便其他人。本文涉及的内容主要是Azure的Cloud Service服务。 在Windows Azure中启用Trace 部署到Windows Azure上的代码是不能够用Visual Studi... 阅读全文
posted @ 2013-07-21 01:16 装配脑袋 阅读(7624) 评论(29) 推荐(6) 编辑
2012年1月3日
摘要: 之前我写了一篇用GPU绘制曼德勃罗特(Mandelbrot)集图像的文章,里面使用的技术是与DirectX 11继承在一起的DirectCompute。DirectCompute执行在GPU上的kernel代码,必须用一种特殊的HLSL语言来编写。虽然这种语言有些类似于C,但一些特殊的细节使得没接触过DirectX的开发人员很不适应。相比于kernel代码,驱动HLSL所要进行的准备工作那简直麻烦... 阅读全文
posted @ 2012-01-03 15:02 装配脑袋 阅读(11168) 评论(11) 推荐(7) 编辑
2011年8月18日
摘要: 前几天技术大牛Vczh同学开发了一个函数图像绘制程序,可以画出方程f(x,y)=0的图像。他的原理是用图像上每一点的坐标带入函数f得到针对x和y的两个方程,再用牛顿迭代法求解得到一组点集,然后画到图像上。用他的程序可以画出各种各样令人惊叹的方程图形。但是他的程序非常慢,因为对每一个点坐标都用牛顿迭代法求解是一项很费时的任务,即使采用了Parallel.For,CPU算起来也很吃力。我研究了他的程序... 阅读全文
posted @ 2011-08-18 23:48 装配脑袋 阅读(17212) 评论(18) 推荐(14) 编辑
2011年8月2日
摘要: 前一阶段我们完成了编译器中的重要阶段——语义分析。现在,程序中的每一个变量和类型都有其正确的定义;每一个表达式和语句的类型都是合法的;每一处方法调用都选择了正确的方法定义。现在即将进入下一个阶段——代码生成。代码生成的最终目的,是生成能在目标机器上运行的机器码,或者可以和其他库链接在一起的可重定向对象。代码生成,和这一阶段的各个优化手段,统称为编译器的后端。目前大部分编译器,在代码生成时,都倾向于... 阅读全文
posted @ 2011-08-02 14:57 装配脑袋 阅读(16070) 评论(45) 推荐(24) 编辑
2011年7月22日
摘要: 上回我们已经用VBF的Parsers.Combinators库生成了miniSharp的语法分析器,并且能够将miniSharp的源代码翻译成抽象语法树(AST)。这一回我们要继续进行下一步——语义分析。就目前大家接触的编程语言,如C#、VB、C++来说,语义分析是编译器前端最复杂的部分。因为这些编程语言的语义都非常复杂。语义分析不像之前词法分析、语法分析那样,有一些特定的工具来帮助。这一部分通常... 阅读全文
posted @ 2011-07-22 11:15 装配脑袋 阅读(21311) 评论(15) 推荐(15) 编辑
2011年7月8日
摘要: 经过前面四篇的铺垫,我们终于拥有了编写语法分析器的强大工具,现在可以正式开发一门编程语言的语法分析器了。我们先来定义miniSharp的语法规则,然后根据LL文法的特点进行一些调整,最后借助解析器组合子生成完整的语法分析器。 miniSharp语言是C#的一个小子集,然而它仍然具有一门完整编程语言的所有要素,而且仍然是一种面向对象的语言。我们把miniSharp的语法分成三类——声明结构、语句和... 阅读全文
posted @ 2011-07-08 01:19 装配脑袋 阅读(15080) 评论(23) 推荐(17) 编辑
2011年7月3日
摘要: 上回我们用函数式编程的方法,结合Linq语法,建立了一套解析器组合子方案,并能成功解析自定义文法的输入字符串。但是,上次做成的解析器组合子有个重要的功能没有完成——错误报告。作为编程语言的语法分析器,不能在遇到语法错误的时候简单地返回null,那样程序员就很难修复代码中的语法错误。我们需要的是准确报告语法错误的位置,更进一步,是程序中所有的语法错误,而不仅仅是头一个。后者要求解析器具有错误恢复的能... 阅读全文
posted @ 2011-07-03 22:16 装配脑袋 阅读(14551) 评论(13) 推荐(10) 编辑
2011年6月26日
摘要: 上回我们说到手写递归下降语法分析器。手写递归下降的方式是目前很多编译器采用的方式,如果你想写一个商业质量的编译器,这是首选的方法。但是,一个完善的递归下降解析器需要的代码量也不少,如果要进行错误报告、错误恢复等等那代码量就更大了。作为懒人,我们有时想要一些小型语言的解析器,最好写起来像直接写文法的产生式一样,最好连错误报告和错误恢复也一并自动解决,可能吗?在过去很长一段时间,人们采用的方法是使用解... 阅读全文
posted @ 2011-06-26 20:28 装配脑袋 阅读(16986) 评论(20) 推荐(14) 编辑
2011年6月21日
摘要: 上回我们说到语法分析使用的上下文无关语言,以及描述上下文无关文法的产生式、产生式推导和语法分析树等概念。今天我们就来讨论实际编写语法分析器的方法。今天介绍的这种方法叫做递归下降(recursive descent)法,这是一种适合手写语法编译器的方法,且非常简单。递归下降法对语言所用的文法有一些限制,但递归下降是现阶段主流的语法分析方法,因为它可以由开发人员高度控制,在提供错误信息方面也很有优势。... 阅读全文
posted @ 2011-06-21 00:22 装配脑袋 阅读(39450) 评论(25) 推荐(17) 编辑
2011年6月18日
摘要: 上回我们已经学习了语法分析第一阶段——词法分析的原理和工具,介绍了正则表达式、正则语言和DFA等工具。今次我们要开始涉及编译器前端最重要的阶段——语法分析。简单而言,这一步就要完整地分析整个编程语言的语法结构。上回说到词法分析的结果是将输入的字符串分解成一个个的单词流,也就是诸如关键字、标识符这样有特定意义的单词。一种完整的编程语言,必须在此基础上定义出各种声明、语句和表达式的语法规则。观察我们所... 阅读全文
posted @ 2011-06-18 20:27 装配脑袋 阅读(23130) 评论(20) 推荐(16) 编辑