• Stars
    star
    212
  • Rank 186,122 (Top 4 %)
  • Language
    C
  • Created about 6 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

郑钢《自制编程语言》随书源码及读书笔记

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

本仓库内容

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

总结

  1.基础永远值得花费90%的精力去学习加强。厚积而薄发~

1534913291571.png

More Repositories

1

learn-kvm

Qemu KVM(Kernel Virtual Machine)学习笔记
C
830
star
2

linux-0.12

赵炯老师《linux-0.12 内核完全剖析》读书笔记及linux-0.12注释源码
C
454
star
3

os-elephant

《操作系统真象还原》源码及学习笔记(os-elephant)还原真相
C
230
star
4

c

C语言学习
189
star
5

LinuxKernelTravel

Linux 内核之旅公众号文章
HTML
119
star
6

jz2440

ARM体系结构学习+ARM uboot+Linux内核+Linux驱动
110
star
7

vita

《深度探索Linux操作系统 : 系统构建和原理解析》 学习笔记
Shell
72
star
8

learn-tlpi

TLPI(The Linux Programming Interface)《linux/unix系统编程手册(上、下册)》学习笔记
C
61
star
9

Code-virtualization-and-automation-analysis

代码虚拟化与自动化分析
C++
60
star
10

LinuxDev

Linux阅码场(LinuxDev)公众号文章收集
HTML
56
star
11

X86-assembly-language-from-real-mode-to-protection-mode

x86汇编语言 从实模式到保护模式
Assembly
54
star
12

linux-3

《深入理解Linux网络(张彦飞)》; 《内核解密》;
C
39
star
13

bash

《Linux命令行与Shell脚本编程大全》 学习笔记
36
star
14

CodingInterview2

《剑指Offer》第二版源代码及相关学习笔记~
C++
31
star
15

linux-3.13.0

linux kernel 3.13.0 研究学习 & 电子科技大学 李林 《Linux操作系统内核技术》课程PPT
C
31
star
16

learn-network

计算机网络学习笔记~
30
star
17

Android-software-security-and-reverse-analysis

Android软件安全与逆向分析
Smali
27
star
18

learn-linux

linux基本用法,基本概念,基本原理笔记
26
star
19

linux-net

Linux 1.2.13 网络协议栈学习
C
25
star
20

python

Python 学习笔记
16
star
21

learn-make

GNU Make及Makefile语法语义分析学习笔记
15
star
22

Software-protection-and-analysis-techniques---principles-and-practices

软件保护及分析技术——原理与实践
C++
14
star
23

linux-2.4.0

linux kernel 2.4.0 研究学习
C
13
star
24

parser-elf

ELF解释器及相关学习笔记
Python
13
star
25

learn-cpp

C++学习笔记~汇编C++
C++
12
star
26

learn-vim

vim基本学习
JavaScript
12
star
27

learn-LDDD

《Linux 设备驱动开发详解》(宋宝华) 学习笔记
C
12
star
28

awesome-asm

12
star
29

linux-kernel-driver

Linux内核驱动demo仓(lkm、ldd)
C
11
star
30

learn-unp2

《UNIX网络编程·卷2:进程间通信(第2版)》学习笔记
C
11
star
31

crash

内核crash分析
C
11
star
32

linux-2

《深入理解LINUX内核第三版》、《深入理解LINUX网络内幕》、《深入理解LINUX虚拟内存管理》、《Linux那些事儿之我是USB》学习笔记
C
11
star
33

learn-unp1

《UNIX网络编程 卷1:套接字联网API(第3版)》学习笔记
C
10
star
34

FriendlyARM-Tiny6410

友善之臂(FriendlyARM)开发板Tiny6410学习笔记
9
star
35

learn-linux_exploit

Linux Exploit 学习笔记~
C
9
star
36

learn-awk

awk基本功;学习笔记;上古神器;文本处理三剑客;文本格式化工具;报告生成器
8
star
37

kflow

kenrel 内核函数调用关系分析工具
Python
8
star
38

learn-git

Git学习笔记
7
star
39

markdown-image-paste-delete

Atom markdown快速贴图/删图插件(atom markdown image paste delete plugin)
CoffeeScript
6
star
40

gdb

gdb学习笔记
C
6
star
41

go-raft

raft协议学习
Go
5
star
42

learn-systemd

linux systemd工具学习
5
star
43

eaidk-610

eaidk-610
C++
5
star
44

linux-syscall

linux syscall handbook
5
star
45

learn-ebpf

ebpf学习笔记~
5
star
46

learn-autotools

Autotools : a practitioner's guide to GNU Autoconf, Automake, and Libtool
5
star
47

koji

基于Rocky Linux 8.6/Fedora基础设施koji项目/koji-1.30.1
Python
5
star
48

linux-0.11-lab

C
4
star
49

rocky-linux

Rocky Linux 学习笔记
4
star
50

learn-IMX6U

I.MX6U 开发板学习笔记
4
star
51

those-things-of-linux

《Linux那些事儿》系列读书笔记~TTL(Those Things of Linux)
4
star
52

firefly-rk3399

firefly rk3399玩耍记录
4
star
53

learn-skynet

skynet学习笔记
4
star
54

OpenWrt-gdock

竞斗云2.0 OpenWRT-p2w_r619ac-128m-firmware
Shell
4
star
55

linux-6

Debian kernel 6.1.20
C
4
star
56

learn-imx6ull

跟着原子哥学嵌入式~
4
star
57

SEAL

微软开源同态加密函数库
C++
4
star
58

Ubuntu18.04-MacOS-themes

Ubuntu18.04 MacOS themes
4
star
59

learn-qianfengedu

千锋教育 学习笔记
4
star
60

32to64

x86汇编语言从实模式到保护模式
Assembly
4
star
61

learn-apue

APUE(Advanced Programming in the UNIX)《UNIX环境高级编程(第3版)》学习笔记
C
4
star
62

Android-system-source-code-scene-analysis

android系统源代码情景分析,基于android2.3.1
Java
4
star
63

markdown-preview-auto-open-close

Atom插件:开启/关闭 Markdown 文件时自动开启/关闭预览功能 (Automatically turn on/off preview when opening/closing Markdown files)
JavaScript
4
star
64

learn-mips

MIPS 体系架构学习
4
star
65

pungi

基于Fedora36/Fedora基础设施pungi项目/pungi-4.3.6
Python
3
star
66

learn-kernel

Learn Linux Kernel~
3
star
67

write-a-C-interpreter

C
3
star
68

LinuxHacker

Linux内核学习笔记
C++
3
star
69

runninglinuxkernel_4.0

C
3
star
70

git

git 相关操作,免密码登录等。自己弄一波脚本,自己搞的自己清楚,免得去记忆一波锤子配置文件,懒有懒得技巧~
Shell
3
star
71

pciutils-3.7.0

pciutils-3.7.0
C
3
star
72

createrepo_c

基于Rocky Linux 8.6/rpm-software-management基础设施之createrepo_c解析
C
3
star
73

learn-bcc

bcc学习笔记
3
star
74

ndb

ndb内核调试
3
star
75

rk3399-evb

rk3399-evb(Rockchip RK3399pro evb v11 board)
3
star
76

analysis-cve

CVE Analysis and Exploit
3
star
77

learn-debian

《The Debian Administrator's Handbook》- Debian 管理员手册
3
star
78

learn-kerberos

kerberos协议及工具学习
3
star
79

go-keep

Golang 不停服、不停机、热重启、热升级、热更新
3
star
80

learn-tmux

tmux基本功学习
3
star
81

kdev

Linux内核开发环境构建工具 (2.*/3.*/4.*/5.*/6.*)
Python
3
star
82

learn-m4

GNU m4 是一个通用的宏处理器,由 Brian Kernighan 和 Dennis Ritchie 设计
3
star
83

numactl

numactl解析
Shell
2
star
84

vscode

vscode
2
star
85

skill-idea

IDE 编辑器技巧总结
2
star
86

microsegment

微隔离(Micro-segmentation)
2
star
87

usbutils-010

usbutils-010
2
star
88

repo

repo工具使用
Python
2
star
89

redis-5.0.3

redis-5.0.3
C
2
star
90

tmux

tmux 配置文件
Shell
2
star
91

learn-etcd

etcd raft 高可用、分布式 Key/Value 存储系统
2
star
92

learn-markdown

markdown学习笔记
2
star
93

kubernetes-1.14.0

kubernetes-1.14.0
Go
2
star
94

learn-re

正则表达式学习笔记
2
star
95

learn-zabbix

zabbix学习笔记
2
star
96

patch-2.7.6

patch-2.7.6
C
2
star
97

arch-mips

mips体系架构学习
2
star
98

dnf

dnf-4.7.0
Python
2
star
99

OpenCloudOS

OpenCloudOS 开源操作系统社区
2
star
100

OpenEuler

OpenEuler 开源操作系统社区
2
star