《自制编程语言》学习笔记
本仓库内容
《自制编程语言》源码src/sparrow.tgz
《自制编程语言》读书笔记docs/*
《自制编程语言》样章阅读reference/自制编程语言-样章.pdf等
相关站点
GitBook访问地址:https://yifengyou.gitbooks.io/sparrow/content/GitHub访问地址:/yifengyou/sparrow/Something I hope you know before go into the coding~First, please watch or star this repo, I'll be more happy if you follow me.Bug report, questions and discussion are welcome, you can post an issue or pull a request.
参考书目
内容简介
该书全面从脚本语言和虚拟机介绍开始,讲解了词法分析的实现、一些底层数据结构的实现、符号表及类的结构符号表,常量存储,局部变量,模块变量,方法存储、虚拟机原理、运行时栈实现、编译的实现、语法分析和语法制导自顶向下算符优先构造规则、调试、查看指令流、查看运行时栈、给类添加更多的方法、垃圾回收实现、添加命令行支持命令行接口。
该书旨在用C语言完成一个简单的脚本语言(A object-oriented script language)。
编程语言用C,编译环境x86
基础开发环境
宿主操作系统采用CentOS 6.8编译器Gcc版本 gcc version 4.4.7 0313(高版本可能需要解决编译问题,看下面常见问题解决)
《自制编程语言》目录
第0章-一些可能令人迷惑的问题第1章-设计一种面向对象脚本语言第2章-实现词法分析器第3章-类与对象第4章-原生方法及基础实现第5章-自上而下算符优先—TDOP第6章-实现语法分析与语义分析第7章-虚拟机第8章-内建类及其方法第9章-垃圾回收第10章-命令行及调试勘误常见问题
编译报错vm/core.o:在函数‘primObjectIs’中:/root/github/sparrow/src/c4/b/vm/core.c:103:对‘getClassOfObj’未定义的引用vm/core.o:在函数‘primObjectType’中:/root/github/sparrow/src/c4/b/vm/core.c:129:对‘getClassOfObj’未定义的引用collect2: error: ld returned 1 exit statusmakefile:9: recipe for target 'spr' failedmake: *** [spr] Error 1
解决方法:
修改makefile文件,在CFLAGS中添加-fgnu89-inline
CC = gcc#CFLAGS = -g -DDEBUG -lm -Wall -I object -I vm -I compiler -I parser -I include -I cli -I gc -W -Wstrict-prototypes -Wmissing-prototypes -Wsystem-headersCFLAGS = -g -lm -Wall -I object -I vm -I compiler -I parser -I include -I cli -I gc -W -Wstrict-prototypes -Wmissing-prototypes -Wsystem-headers -fgnu89-inlineTARGET = sprDIRS = object include cli compiler parser vm gc CFILES = $(foreach dir, $(DIRS),$(wildcard $(dir)/*.c))OBJS = $(patsubst %.c,%.o,$(CFILES))$(TARGET):$(OBJS)$(CC) -o $(TARGET) $(OBJS) $(CFLAGS)clean:-$(RM) $(TARGET) $(OBJS)r: clean $(TARGET)
修改过后必须先make clean
一下,你应该知晓makefile是根据时间撮判断,那么先前编译通过的,但是并没有报错不会再次编译,毕竟你也没有改过源码文件,时间撮也没有变。
那么如何批量替换呢??考验shell脚本编程功底,一句话搞定式
find . -name "makefile" | xargs perl -pi -e 's/-Wsystem-headers/-Wsystem-headers -fgnu89-inline/g'
之后便可在高版本gcc中编译,本人使用的版本是gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3) 运行在Ubuntu 18.04.1 LTS x64