300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 《自制编程语言--基于C语言 郑钢》学习笔记

《自制编程语言--基于C语言 郑钢》学习笔记

时间:2024-04-22 08:03:51

相关推荐

《自制编程语言--基于C语言 郑钢》学习笔记

《自制编程语言》学习笔记

本仓库内容

《自制编程语言》源码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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。