《自制編程語言--基於C語言 鄭鋼》學習筆記


《自制編程語言》學習筆記

本倉庫內容

  • 《自制編程語言》源碼 src/sparrow.tgz
  • 《自制編程語言》讀書筆記 docs/*
  • 《自制編程語言》樣章閱讀 reference/自制編程語言-樣章.pdf等

相關站點

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.

參考書目

1534912827483.png

內容簡介

該書全面從腳本語言和虛擬機介紹開始,講解了詞法分析的實現、一些底層數據結構的實現、符號表及類的結構符號表,常量存儲,局部變量,模塊變量,方法存儲、虛擬機原理、運行時棧實現、編譯的實現、語法分析和語法制導自頂向下算符優先構造規則、調試、查看指令流、查看運行時棧、給類添加更多的方法、垃圾回收實現、添加命令行支持命令行接口。

該書旨在用C語言完成一個簡單的腳本語言(A object-oriented script language)。

編程語言用C,編譯環境x86

基礎開發環境

  1. 宿主操作系統采用CentOS 6.8
  2. 編譯器Gcc版本 gcc version 4.4.7 20120313(高版本可能需要解決編譯問題,看下面常見問題解決)

《自制編程語言》目錄

常見問題

  1. 編譯報錯
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 status
makefile:9: recipe for target 'spr' failed
make: *** [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-headers
CFLAGS = -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-inline
TARGET = spr
DIRS =  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'

1535422644606.png

 

 

之后便可在高版本gcc中編譯,本人使用的版本是gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3) 運行在Ubuntu 18.04.1 LTS x64

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM