易截截图软件、单文件、免安装、纯绿色、仅160KB

【转】使用Flex Bison 和LLVM编写自己的编译器v

原文出处:http://gnuu.org/2009/09/18/writing-your-own-toy-compiler
1、介绍
我总是对编译器和语言非常感兴趣,但是兴趣并不会让你走的更远。大量的编译器的设计概念可以搞的任何一个程序员迷失在这些概念之中。不用说,我也曾
今尝试过,但是并没有取得太大的成功,我以前的尝试都停留在语义分析阶段。本文的灵感主要来源于我最近一次的尝试,并且在这一次中我取得一点成就。
幸运的是,最近的几年,我参加了一些项目,这些项目给了我在建立编译器上很多有用的经验和观点。另外一件事是,我非常幸运得到LLVM
的帮助。对于这个工具,我不知道改怎么去形容它,但是他给我的这个编译器的确带来非常大的帮助。
1.1、你为什么要阅读本文
你也许想看看我正在做的事情,但是更有可能的是,你也是和我一样对编译器和语言非常感兴趣,并且也可能遇到了一些在探索的过程中遇到了一些难题,你
可能正打算解决这些难题,但是却没有发现好的资源。本文的目标就是提供这些资源,并以一种手把手的方式教你从头到尾的去创建一个具有基本功能的语言编译
器。
在本文,我不会去解释一些编译器基本理论,所以你要在开始本文前去了解什么是BNF语法
,什么是抽象语法树数据结构 AST data structure
,什么是基础编译器流水线 complier pipline
。就是说,我会把本文描述的尽量简单。本文的目的就是以一种简单易懂的方式来介绍相关编译器资源的方式来帮助那些从来没有编译器经验的人。
1.2、达到的成果
如果你根据文章内容一步步来,你将会得到一个能定义函数,调用函数,定义变量,给变量赋值执行基本数学操作的语言。这门语言支持两种基本类
型,double和integer类型。还有一些功能还未实现,因此,你可以通过自己去实现这些功能得到你满意的功能并且能为你理解编写一个编译器提供不
少的帮助。
1.3 问题解答
1.3.1 我需要了解什么样的语言
我们使用的工具是基于C/C++的。LLVM是基于C++的,我们的这个语言也基于C++,因为C++具有很多面向对象的优点和可以被重用的
STL。此外对于C,Lex和Bison都具有那些初看起来令人迷惑的语法,但是我将尽可能的去解释他。我们需要处理的语法非常小,最多就100行,因此
它是比较容易理解的。
1.3.2 很复杂吗?
是或否,这里面有很多的东西你需要了解,甚至多的让人感觉到害怕,但是老实说,其实这些都非常简单,我们同样会使用很多工具分解这些层次的复杂性,并使得这些内容可管理。
1.3.3 完成它需要多长时


相关文档:

Flex表单中回车下移焦点的方法

对于习惯了使用桌面应用程序的用户而言,回车后下移焦点到下一个编辑组件中的小功能,是非常贴心的,利用flex中的KEY_DOWN事件可以方便的实现回车下移焦点,代码如下:
 <?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplet ......

FLEX实践—动态切换应用皮肤

     在同一个Application中动态切换主题,这里采用的是动态引用不同的CSS文件。
      具体步骤如下:
     1)创建CSS文件
      skyTheme.css
      /* CSS file */
.backgroudSkin
{
&nbs ......

Flex TypeError: Error #1034: 类型转换失败

TypeError: Error #1034: 強制型変換に失敗しました。jp.co.nec.necst.pi.ap2web::TestEvent@1645ee79 を jp.co.nec.necst.pi.ap2web.TestEvent に変換できません。
 at flash.events::EventDispatcher/dispatchEventFunction()
 at flash.events::EventDispatcher/dispat ......

关于flex的crossdomain.xml文件存放目录

       最近在项目中遇到flex跨域访问的安全沙箱问题,查资料了解到需要在服务端加上crossdomain.xml文件,即:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-do ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号