
编译器实践
文章平均质量分 77
Lionel_D
这个作者很懒,什么都没留下…
展开
-
编译器实践一 之 加法栈式计算机
下面是一个简单的小型加法栈式计算机#include <stdio.h>#include <stdlib.h>///////////////////////////////////////////////// Data structures for the Sum language.enum Exp_Kind_t {EXP_INT, EXP_SUM};struct Exp_t{ enum Exp_Kind_t kind;};struct Exp_Int{ enum Exp_原创 2015-07-13 20:28:11 · 1736 阅读 · 4 评论 -
编译器实践 二 之 小型的词法分析器
下面是一个简单的词法分析器#include <stdio.h>#include <string.h>using namespace std ;int main(){ char str[150] ;// freopen("C:\\Users\\Lionel\\Desktop\\1.txt","r",stdin) ; int row = 1 , cow = 0 ; while(gets(str)) { char temp[10] ; int index = 0 , i = 0;原创 2015-07-13 20:32:05 · 1308 阅读 · 0 评论 -
编译器实践三 之 针对算术表达式的语法分析器
部分代码来自MOOC#include <ctype.h>#include <stdio.h>#include <stdlib.h>void parse_F();void parse_T();void parse_E();void error (char *want, char got);int i;char *str = 0;void error (char *want, char got){ fprintf (stderr, "Compling this expressi原创 2015-07-13 20:39:54 · 3057 阅读 · 1 评论 -
编译器实践五 之 构造一个支持加减乘除的栈式计算机
我的第一篇博客:编译器实践一 之 加法栈式计算机最近学习了一点简单的Bison再加上抽象语法树,于是做了一下MOOC的留下的作业,按照要求,改了和增加了几处代码,感觉学到了很多东西。不过为了减少难度,突出侧重点,我没有去管理内存,内存泄露有点严重,代码仅供参考。功能是输入一行或者多行算术表达式,对表达式建立抽象语法树,然后输出(主要是为了查看抽象表达式建立的是否准确),编译,完成对栈式计算机的模拟,原来的代码不支持减法,除法,括号表达式,并且只能完成一行的编译,我把它推广到了任意行数。下面是对抽象语法原创 2015-08-16 19:22:51 · 1407 阅读 · 0 评论 -
编译器实践四 之 FIRST集合,NULLABLE集合,FOLLOW集合
闲来无事,就把龙书拿出来有看了看,把最近学的总结一下。 FIRST(X)集合定义:可从X推导得到的串的首符号的集合,其中X是任意文法符号。如果X=>······=>ε ,那么ε也在FIRST(X)中。(定义来自龙书) 算法伪代码(非准确版):foreach(nonterminal N) FIRST(N) = {}while(some set is changing) foreach (production p: N->β1 … βn) if (β1== a …) FIRST(N)∪原创 2015-07-29 21:51:27 · 2521 阅读 · 3 评论