编译器DIY————序

突然间有一种冲动想自己写一个编译器。于是在网上查了查相关的资料,本以为direct3D 里面有龙书的称呼,没想到编译器这一块也有个龙书

Compilers Principles,Techniques, & Tool 和虎书

Modern Compiler Implementation in C  。

在开源项目上找到了编译器的开源项目,其中有一个是UCC 模仿的LCC 写出来的,不过据说这个UCC 是清华大学大三学生做的,本人也是大三,也想去尝试下,相信自己一定可以的!大学学了3年的理论,操作系统,计算机组成原理,汇编等,感觉学完之后除了有一个印象之外,什么都没有留下。而现在自己平时用的都是课后自学的,与那些基础相差甚远,是不是自己走歪了,还是说自己想多了。我们从小就被教导基础很重要,高楼大厦离不开深深的地基支持。可是在软件中,有同学参加软件班或者培训速成,一两年就直接出去工作,有学好的工资还不低。不过也有人觉得以上的基础都是看不见摸不着的逻辑思维的一块,我不反对,因为我也赞同,不过不是很赞同。如果我们热爱计算机,如果我们想在软件专业的路上走的更远那么上述的基础都是必须的,如果只是为了在这行业找一份工作养家糊口,我想参加速成式的培养也是一个很好的选择。在此我希望自己以后首先可以养家糊口,然后有条件继续弄计算机,说实话,自己太喜欢它了。高中时候,看到美国电影中的黑客简直就是一个膜拜啊,还记得那个情节是这样的,几个人中有一个黑客拿着电脑,攻破了银行的安全系统,他们大摇大摆地走进银行,监控系统根本不起作用,然后在最后的保险库前,又是那个黑客破解了密码打开了大门,于是......后来人挂了,钱还没花完。这档次比起那些直接拿一把枪抢劫银行的人来说真是比都没法比啊。于是乎,在上大学的时候义无反顾的选择了软件专业,只为了心中那个一直坚持的目标!

之前的编译原理学的半桶水,现在重新回过头去理解以及结合网上的一些书籍学了2天了,下篇博客将正式开始编译器DIY 的连载!

编译器DIY————序

时间: 2024-10-03 11:17:34

编译器DIY————序的相关文章

编译器DIY——词法分析

在上一篇文章中已经介绍了读文件的操作,那么这一篇文章中将会仔细解释词法分析. 在源文件中解析出的单词流必须识别为保留字,标识符,常量,操作符和界符五大类 1.显然我们需要列举出所有的保留字,而这里与保留字相似的那么就是标识符,在C语言中,保留字都是以小写字母开头,而且其中的字母只能是小写字母,而标识符的第一个字母则必须为字符(小写大写皆可)后面可以接大小写字母和字符 '_', 在我写的这个编译器中,标识符不能超过100,在C语言中的标识符定义的长度大小远远大于此. 2.对于常量,这里需要注意的是

编译器DIY之———统计英文文本中的单词数,字符数和行数

咳咳,这一章节应该是连载编译器的DIY的,可是在做DIY之前先用flex 来练练手,对于后面的理解有帮助作用. 在word 中我经常看到有一个单词统计的功能,那么是怎么来实现的了,当然第一个念头就是遍历整个文本依据换行和空格对字符串进行分析,那么这是可行的.可是能不能简单点了,其实对文本做单词分析,大家都知道怎么做,难得地方可能就是代码的实现了,那么现在如果使用正则表达式来实现的话,那么一切问题就Over 了. 环境:ubuntu(当然装了flex的windows和mac也可以) 原码: %{

编译器DIY——读文件

http://passport.baidu.com/?business&un=%E6%89%BE%5F%E5%BB%B6%E5%BA%86%5F%E5%B0%8F%E5%A6%B9%5F#0 http://passport.baidu.com/?business&un=%E6%89%BE%5F%E5%A4%A9%E6%B4%A5%5F%E7%BE%8E%E5%A5%B3%5F#0 http://passport.baidu.com/?business&un=%E5%BB%B6%E5

Volatile从入门到放弃

1.引言 如果你对java的volatile有着疑虑请阅读本文,如果你想对volatile想有一个更深的了解,请阅读本文.本文主要讲的是volatile的写happen-before在volatile读之前所涉及相关的原理,以及在Hotspot中相关代码的实现. 首先从一段代码开始讲起,如下 初始化 int a = 0, int b = 0; void foo(void) { a= 1; b= 1; } void bar(void) { while (b == 0) continue; If(a

Atitit.注解解析(1)---------词法分析 attilax总结 java .net

Atitit.注解解析(1)---------词法分析 attilax总结  java .net 1. 应用场景:::因为要使用ui化的注解 1 2. 流程如下::: 词法分析(生成token流) >>>>语法分析(生成ast) >>解释执行... 2 3. 词法分析的框架,antlr 2 4. Fsm 状态机/// switch 2 5. 单词流必须识别为保留字,标识符(变量),常量,操作符(运算符 )和界符五大类 2 5.1. 操作符(运算符 )::: 2 5.2.

atitit.词法分析的实现token attilax总结

atitit.词法分析的实现token attilax总结 1. 词法分析(英语:lexical analysis)跟token 1 1.1. 扫描器 2 2. 单词流必须识别为保留字,标识符(变量),常量,操作符(运算符 )和界符五大类 2 2.1. 操作符(运算符 )::: 3 2.2. 4.界符:":"分号,"{}"大括号,单引号,双引号 3 3.  如何进行词法分析? 3 3.1. 使用Fsm状态机(自动机) 3 4. 词法分析器框架选型 4 4.1. 语法

Atitit.注解and属性解析(2)---------语法分析 生成AST attilax总结 java .net

Atitit.注解and属性解析(2)---------语法分析 生成AST  attilax总结  java .net 1. 应用场景:::因为要使用ui化的注解 1 2. 使用解释器方式来实现生成AST 1 3. 识别TerminalExpression和NonterminalExpression 2 1.1. 单词流必须识别为保留字,标识符(变量),常量,操作符(运算符 )和界符五大类 2 1.2. 操作符(运算符 )::: 2 4. 生成括号操作符表达式 2 5. 逗号操作符表达式 5

Atitit. 解释器模式框架选型 and应用场景attilax总结 oao

Atitit. 解释器模式框架选型 and应用场景attilax总结 oao 1. 解释器模式结构描述 1 2. 如何实现(简单的解释器模式,仅仅通过词法分析即可实现,而无需token流进行处理. 2 3. 单词流必须识别为保留字,标识符(变量),常量,操作符(运算符 )和界符五大类 2 3.1. 操作符(运算符 )::: 2 3.2. 4.界符:":"分号,"{}"大括号,单引号,双引号 3 4. TerminalExpression和NonterminalExp

谈乱序执行和内存屏障【转】

谈乱序执行和内存屏障 10多年前的程序员对处理器乱序执行和内存屏障应该是很熟悉的,但随着计算机技术突飞猛进的发展,我们离底层原理越来越远,这并不是一件坏事,但在有些情况下了解一些底层原理有助于我们更好的工作,比如现代高级语言多提供了多线程并发技术,如果不深入下来,那么有些由多线程造成问题就很难排查和理解. 今天准备来聊聊乱序执行技术和内存屏障.为了能让大多数人理解,这里省略了很多不影响理解的旁枝末节,但由于我个人水平有限,如果不妥之处,希望各位指正. 按顺执行技术 在开始说乱序执行之前,得先把按