完整cmm解释器构造实践(三):语法分析
语法树节点
我的语法分析器不仅会判断cmm代码的语法是否正确, 同时会存储分析过程中得到的信息, 完成语法树的构建.
为什么要有语法树呢, 其实还是为了计算机方便做进一步的处理才用的, 语法树里面存储了从代码里面提取的信息, 我们生成语法树之后再通过遍历语法树来得到中间代码. 当然直接遍历语法树并解释执行也是可以的, 我们老师非得让我们有中间...
分类:
其他好文 时间:
2015-02-07 18:58:45
阅读次数:
593
1、龙书(Dragon book)英文名:Compilers: Principles,Techniques,and Tools作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman中文名:编译原理技术和工具第一版龙书第二版龙书龙书”。龙书是Alfred V. Aho等...
分类:
其他好文 时间:
2015-02-05 20:19:24
阅读次数:
191
自动生成的词法分析器跟之前讲的图转移算法是类似的,因为是自动生成,为了把整个流程形式化,需要用另外一个数学工具--有限状态自动机。 从数学上讲,有限状态自动机是什么概念呢? 输入一个字符串,如果字符串能够接受,则输出Yes,否则输出No。有限状态自动机是一个五元组,M=(S, Σ, ...
分类:
其他好文 时间:
2015-02-01 14:48:50
阅读次数:
213
我们都知道,计算机只能识别二进制语言,是不能直接识别java c c++等高级语言的。将高级语言转化成计算机可以是别的二进制语言,这个过程就叫编译。 有次面试,面试官问了一道“java的编译原理是什么”,当时给懵了,只知道是把java文件转换成class文件,然后由jvm执行,具体流程就不知道...
分类:
编程语言 时间:
2015-01-30 19:11:09
阅读次数:
158
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出...
分类:
其他好文 时间:
2015-01-27 21:36:19
阅读次数:
283
前言之前一直没有接触数据库的学习,只是本科时候修了一本数据库基本知识的课。当时只对C++感兴趣,天真的认为其它的课都没有用,数据库也是半懂不懂,胡乱就考试过了。现在学习大数据分析,接触了数据挖掘,才感觉到数据库是不可跨越的坎。直到现在才感觉到《操作系统》、《编译原理》、《计算机组成原理》等等课程的重...
分类:
数据库 时间:
2015-01-24 21:18:48
阅读次数:
295
描述真实的编译器非常困难。“真正的”编译器——也就是希望在每天编程中用到的——内容太复杂而且不易在本教材中掌握。另一方面,一种很小的语言(其列表包括1 0页左右的文本)的编译也不可能准确地描述出“真正的”编译器所需的所有特征。
为了解决上述问题,人们在( A N S I)C中为小型语言提供了完整的源代码,一旦能明白这种技术,就能够很容易地理解这种小型语言的编译器了。这种语言称作T I N Y...
分类:
编程语言 时间:
2015-01-24 17:27:03
阅读次数:
261
cmm是c的一个子集,保留字只有如下几个
if else while read write int real
特殊符号有如下几个
+ - * / = ( ) ; { } [ ] /* */
标识符:由数字,字母或下划线组成的字符串,且不能使关键字,第一个字母不能是数字
如果了解c很容易明白上面的是什么意思,也会明白cmm其实有的东西并不多,所以做cmm解释器相对来说比较简单。...
分类:
其他好文 时间:
2015-01-23 20:12:31
阅读次数:
170
就如标题一样,真本书可以说很棒,基本上覆盖了一个程序从编译-链接-装载-到消亡的所有过程。表达清晰完整,也非常的浅显易懂。
作者本身的理念和我的兴趣爱好和所追求的技术路线不谋而合:软件技术本身可以说是日新月异,但是都脱离不开操作系统的运筹帷幄,我们不能把程序本身生命周期当作是黑盒,亦或者是操作系统原理,编译原理书籍上的概念文字,而是要真正转化为程序员可以理解的代码。可以说这本书从这一点上...
分类:
其他好文 时间:
2015-01-23 13:24:10
阅读次数:
205
0、前言
最近项目的流程逐渐清晰,但是很多关键性的技术没有掌握,也只能一步一步摸索。
由于要做基于数据流分析的静态代码分析,所以前端的工作如:词法分析、语法分析必不可少。Yacc和Lex什么的就不再考虑了,查了一天的资料,发现两款比较适合,一款是Java下的ANTLR,另一款是专门做PHP AST生成的PHP-Parser。
ANTLR是编译原理领域比较著名的工具了,相对于Yacc和Lex,...
分类:
Web程序 时间:
2015-01-22 23:24:55
阅读次数:
2784