最近对编译原理比较感兴趣,到底一门语言它有什么门道,为了一探究竟就买了本《自制编程语言》,希望把自己一点理解记录下来。
再说都是废话了,进入正题。下面是crowbar 主要代码。
#include <stdio.h>
#include "CRB.h"
#include "MEM.h"
int
main(int argc, char **argv)
{
CRB_Interpreter *interpreter;
FILE *fp;
if (argc != 2) {
fprintf(stderr, "usage:%s filename", argv[0]);
exit(1);
}
fp = fopen(argv[1], "r");
if (fp == NULL) {
fprintf(stderr, "%s not found.\n", argv[1]);
exit(1);
}
/*生成解释器*/
interpreter = CRB_create_interpreter();
/*将FILE*作为参数传递,并生成分析树*/
CRB_compile(interpreter, fp);
/*运行*/
CRB_interpret(interpreter);
/*运行完毕后回收解释器*/
CRB_dispose_interpreter(interpreter);
MEM_dump_blocks(stdout);
return 0;
}
此代码最核心就是CRB_Interpreter这个数据结构,这些函数都是围绕它进行的。下面看下这个结构体各个成员变量。