初学编译原理,终篇。
Posted 内脏坏了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学编译原理,终篇。相关的知识,希望对你有一定的参考价值。
大概一个月的时间吧, 一直在学习编译原理,直到5月31号我仍然还在看编译原理的视频教程, 但是我直接其实我的各方面知识还是有很多欠缺, 比如我没有办法把我分析得出的抽象语法树进一步转化为汇编代码或者java字节码, 因为那些对于我而言又是一个全新的领域, 同时我知道我大4还是会有编译器的课程的, 同时我一直在用java写编译器, 一个很重要的原因就在于, 我的C语言水平不够支持我完成这样一个比较复杂的领域, 所以我感觉是时候先放一放编译原理了, 回想这段时间的学习, 过程中我深深地体会到了算法更直接的说是数学在计算机学习中的重要性, 同时编译原理的学习, 虽然只是大概学习了一下前端的知识, 实现了一门不能算作是语言的语言, 我甚至没有完成正则表达式解析器, 但我还是感觉收获巨大,这一次放下编译原理, 是为了之后更好的继续。下面是当前阶段学习的一些总结。
前端:
- lexer的话主要是各个自动机之间的状态转移,按照所设计的语言的词法(这里一般是用正则表达式来描述)规则将字符流转化为一串tokens。 方法有手撸和词法分析器生成器生成两种 :因为手撸的话我已经实现过了, 下一阶段的在学习编译原理我希望能够完成自己的语法分析器生成器。
- parser第一补是当然是完成语言的cfg了, 然后根据cfg手动递归下降或者是语法分析器生成器来完成语法检查,生成ast:递归下降我也完成了, 下一阶段也同样希望完成自己的词法分析器生成器。
- 第三阶段也是我这段时间学习的最后一个阶段,就是类型检查以及代码生成阶段,这个阶段我当前只是自己实现了一个简单的栈式计算机的解释器来解释自己生产的栈式字节码, 连函数都不支持, 同时while不能嵌套等等, 下一阶段希望实现更为成熟的目标代码或者直接是x86,java字节码。
今天已经是6月9号了,博客我停更了10天,这10天断更有两个原因, 第一个是因为我买了一台外星人, 刚上大学时害怕自己像高中一样沉迷于游戏所以大一刚来学校买的是mbp, 所以我编程学习一直是用mbp,最近也是想体会一下windows的感觉, 所以买了台顶配的外星人,只能说各种不习惯,目前还没有办法在windows上编程,不过写博客的话这个open live writer确实很好用啊,另外吐槽一下这外星人真是好大好重啊,这充电器真tm是块砖。另外一个原因是我在看一本书叫做《Linux C编程一站式学习》, 我看完了这本书的第一部分和第二部分,虽然上学期学习C语言(我接受的是3年本科的英式本科学制,我大一学了一年的语言, 所以目前是大二,是我正式学编程的第一年),C语言, 也算是我接触的第一门编程语言, 虽然我自诩C语言学的比同学都要扎实, 但是其实知道我的C语言水平还是远远不够,所以我决定再次拾起并巩固C语言, 这10天我囫囵吞枣地看完了前两个阶段,有之前学习的基础,很多内容对我来说不算陌生,对于我来说其中的难点在于x86汇编,和链接器, 加载器之类linux工具链。所以之后的这段时间里我会尽量的使用C语言,同时为了学习汇编我决定重新开始看之前放下的书 -- 《深入理解计算机系统》, 这本书我之前只看了前几章,感觉收获颇丰,现在也要重新开始看了,看“龙书学编译原理”这个系列, 虽然说是看龙书, 其实看的是视频,龙书的话我也买了, 但确实是如果你什么都不懂, 我还是建议从视频开始,不然也看不懂龙书。。。 同时这也是我开始记录博客的第一个系列, 接下来个这个系列的名字我已经想好了叫做 读csapp学装逼,主要以csapp这本书为主, 当然也可能会包括一些C语言的小项目之类的。所以从明天开始继续更新博客。。。
以上是关于初学编译原理,终篇。的主要内容,如果未能解决你的问题,请参考以下文章