编译器
文章平均质量分 79
AlexAngel
这个作者很懒,什么都没留下…
展开
-
我的编译器 EBNF的方言
C3语言定义(EBNF方言)关键字: Section Class End Scanner Parser Rule Label Letter Digit LetterOrDigit UpperLetter LowerLetter Symbol原创 2005-04-20 00:00:00 · 2508 阅读 · 1 评论 -
我的编译器 开篇
引言 我在一个数据库项目的开发过程中,需要一个窗体编辑器,待到有了一个拙劣的实现之后,我突然发现我需要一个解释器!按照我自己的想法,我写了一些代码,但很快发现这不是一个解决之道。我需要的是一个真正的解释器。于是我便开始进行文本分析方面的研究,在基础的理论中,当我接触到EBNF这个东西的时候,我惊喜的发现,我要找的东西就是这个了——只要实现了一个EBNF的编译器,就可以通过书写EBNF代原创 2005-04-19 23:45:00 · 3264 阅读 · 1 评论 -
我的编译器 C3编译器
C3编译器 2.1 结构 其实,既然语言已经确定了,剩下的事情就好办了。接下来我们要做的事情就是手工实现C3的编译器,而后面我们将使用我们的自动分析器来处理其他语言,这样我们就可以看到它们的区别。 由于要表示成一种内部表示,也就意味着要设计一个类集,来分别表示这些东西。首当其冲的就是Rule,这是毫无疑问的。 Class Rule P原创 2005-04-20 00:29:00 · 2131 阅读 · 0 评论 -
我的编译器 扫描器
自动扫描器 3.1基本的扫描器 先来说一下基本的扫描器。扫描器的目的是把右字母或字组成的文字、文章拆成一个一个的词。例如:#include void main(){ cout}老掉牙的例子了,让我们来看一看经过扫描器之后这段代码会成什么样子。(从左到右,从上到下)voidmain(){cout“Hello world!”endl;}这里预处理指令没有算数,因为编译器根本不原创 2005-04-21 21:03:00 · 3116 阅读 · 0 评论 -
我的编译器 分析器
自动分析器 4.1分析 分析器的任务就是将扫描器产生的Token流分析后生成分析树,然后交给联编器进行语义检查等。对于分析树的结构,.NET有CodeDom,但是我们在分析时并没有语义信息,无法对应CodeDom中的类。因此只能使用自定义的类。 之后最重要的问题就是使用什么分析方法。常见的就是LL和LR。LL分析法就是由上而下,遇到规则调用就嵌套函数调用,这就造成了对于左原创 2005-04-21 21:19:00 · 2873 阅读 · 5 评论