https://github.com/3swu/Toy-Scheme
A tiny toy Scheme interpreter
https://github.com/3swu/Toy-Scheme
Last synced: about 1 month ago
JSON representation
A tiny toy Scheme interpreter
- Host: GitHub
- URL: https://github.com/3swu/Toy-Scheme
- Owner: 3swu
- License: mit
- Created: 2019-03-12T09:18:22.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-05-06T09:00:35.000Z (about 6 years ago)
- Last Synced: 2024-08-03T18:16:57.837Z (11 months ago)
- Language: C
- Homepage:
- Size: 75.2 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
- AwesomeInterpreter - Toy-Scheme
README
# Toy-Scheme
  
这是一个Scheme语言解释器,使用C语言实现了大部分R5RS的语法特性,参考[计算机程序的构造和解释](https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html)中元解释器的原理。
### Feature
---
支持的表达式:
+ `quote`
+ `define`
+ `if`
+ `lambda`
+ `begin`
+ `cond`
+ `let`
+ `...`支持的内部过程:
+ `+` 整数求和
+ `-` 整数求差
+ `*` 整数求积
+ `/` 整数求商
+ `quotient` 整数求商
+ `remainder` 求余数
+ `=` 判断整数是否相等
+ `<` 判断整数大小
+ `>` 判断整数大小
+ `cons` 连接两个列表或原子
+ `car` 求列表的表头
+ `cdr` 求列表的表尾
+ `set-car!` 设置列表的表头
+ `set-cdr!` 设置列表的表尾
+ `list` 构造列表
+ `eq?` 判断两个列表或原子是否相等
+ `null?` 判断是否为空表
+ `boolean?` 判断是否为布尔型
+ `symbol?` 判断是否是符号
+ `integer?` 判断是否为整数
+ `string?` 判断是否为字符串
+ `pair?` 判断是否为序对
+ `procedure?` 判断是否为内部过程或复合过程
+ `number->string` 将整数转换为字符串
+ `string->number` 将字符串转换为整数
+ `symbol->string` 将符号转换为字符串
+ `string->symbol` 将字符串转换为符号
+ `environment` 查看全局环境中绑定的变量### Build & Install
---
`clone`项目并且在项目内执行:
``` bash
sudo chmod +x ./INSTALL
sudo ./INSTALL
```### Usage
---
直接进入REPL环境
```bash
./Toy-Scheme
```
解释指定的源文件,使用命令`./Toy-Scheme -f [file]`
```bash
./Toy-Scheme -f hello.scm
```
### Requirement
---
为了编译项目,需要有以下的组件:
+ GCC
+ Cmake### Author
---
Wu Lei ([email protected])