Loading...
A Simple Graph-Based Intermediate Representation 论文地址。这是 Sea-of-nodes IR 提出者 Cliff Click 的论文,之前“意识流学” V8 的时候,一直搞不明白 sea of nodes 的思想是什么,也尝试的找了很多资料想学习,但是感觉确实是没看明白。今天,我们通过看论文来学习。论文不难懂,很建议看看论文学习,这篇文章只...
写在前面为了应付安卓课的大作业,又写了一个俄罗斯方块。很幸运的是,确实学到了很多知识,虽然这些知识可能没什么用,但是还是非常的有意思。上一次写俄罗斯方块是高三的时候是在 hp-39gii 图形机上拿着简陋的 hp-basic 写的,最后写出来的结果是这样的遗憾的是当时的源代码已经丢失了,编译后的字节码倒还是在,重新导入回计算器还能把源码找回来,但是我已经懒得折腾这个了,属于是时代的眼泪了。话...
COOL 的语义分析主要对作用域和类型做了检测,这是两个必要的检测。未定义或重复定义的变量会对代码生成造成影响;类型不匹配也会造成各种未定义行为。作用域语义分析中需要对每个标识符(变量、函数)做检测,主要需要检查是否有未定义的标识符和重复定义的标识符。以 COOL 为例,通过维护一个符号表即可实现检测。这个检测过程可能需要对 AST 进行多次遍历,因为在 COOL 中,全局变量可以在声明前引...
语法分析是词法分析的后一步,主要的目的就是通过词法分析器生成的 tokens 来生成抽象语法树(Abstract Syntax Tree,AST)。主要通过上下文无关文法(Context Free Grammar,CFG)来描述语言的语法,使用相应的算法更具 CFG 来解析 tokens 形成 AST。语法分析应该是编译原理中非常偏向数学的一个方面,并且已经有了很成熟的解决方案,这句话的意思...
花了一天多的时间实现了这个词法分析器,从骨架上开始写确实可以少关心很多繁杂的小问题,体验好了许多。词法分析是编译的第一步,做的事情就是对源代码按照语法规则进行分词,并为其指定对应的类型,形成一系列 <类型,词素> 这样的二元组(token,词法单元)。那么要实现这样一个词法分析器,需要做两件事,第一,匹配每个词素,第二,为每个词素指定类型。匹配词素作为一个模式匹配问题,使用正则匹...