摘要:   语法分析是最难写的,而这部分确实最伤脑的。大量的语义动作分析差点把我逼疯。   简而言之,这部分的作用就是在每次归约之后,都进行一些 ,最终让我们得到测试程序的三地址码,即中间代码。 1. 新的数据结构和函数 为了得到中间代码,我引进了几个struct,如 阅读全文
posted @ 2017-05-21 18:32 va_chester 阅读(1678) 评论(0) 推荐(0) 编辑
摘要:   语法分析算是最难的一部分了。总而言之,语法分析就是先设计一系列语法,然后再用设计好的语法去归约词法分析中的结果。最后将归约过程打印出来,或者生成抽象语法树。 1. 设计文法 以下是我的文法(引入的M和N是方便以后的语义分析): 1.1、基本框架 Program Type ma 阅读全文
posted @ 2017-05-21 11:39 va_chester 阅读(24488) 评论(6) 推荐(1) 编辑
摘要: 1. 定义词法单元Tag   首先要将可能出现的词进行分类,可以有不同的分类方式。如多符一类:将所有逗号、分号、括号等都归为一类,或者一符一类,将一个符号归为一类。我这里采用的是一符一类的方式。C代码如下: 2. 具体步骤 一个一个字符地扫描测试代码,忽略空白字符,遇到回车时,记 阅读全文
posted @ 2017-05-21 11:38 va_chester 阅读(5752) 评论(1) 推荐(0) 编辑
摘要:   在学习了编译原理的相关知识后,逐渐的掌握一个编译器的结构、作用和实现方法。同时,希望自己在不断的努力下写出一个简单的C语言编译器。 实现步骤 1. 词法分析器:将C语言测试代码分解成一个一个的词法单元; 2. 语法分析器:利用LR(1)文法分析算法对词法单元进行归约; 3. 阅读全文
posted @ 2017-05-21 11:37 va_chester 阅读(2167) 评论(0) 推荐(0) 编辑