Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/asc8384/wen
https://github.com/asc8384/wen
Last synced: 3 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/asc8384/wen
- Owner: ASC8384
- License: gpl-3.0
- Created: 2022-01-05T07:32:04.000Z (almost 3 years ago)
- Default Branch: ilovebuaa
- Last Pushed: 2023-12-25T12:05:26.000Z (11 months ago)
- Last Synced: 2024-10-11T09:31:07.228Z (26 days ago)
- Language: Go
- Homepage:
- Size: 67.4 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# wen
一款基于递归下降解析器的编程语言,语法类似于 BrainFuck,命名为 `wen-ilovebuaa`。
## tokens
### 1. 空白字符
会忽略换行符( \n ) 、回车符( \r ) 、 横向制表符( \ t )、纵向制表符( \v )、换页符( \f )和空格符这 6 个空白字符 。
### 2. 操作符
|运算符| 作用|
|-|-|
|a| 将指针左移一个位置|
|i| 将指针右移一个位置|
|l| 将指针指向的单元的数值增加1|
|e| 将指针指向的单元的数值减少1|
|o| 输出指针指向的单元的数值(一般为ASCII字符)|
|v| 输入一个数值到指针指向的单元(一般为ASCII字符)|
|b| 如果指针指向的单元的数值为0,跳过匹配的 ]|
|u| 如果指针指向的单元的数值不为0,跳回到匹配的 [|
|+| 将指针处的字节与存储中的字节相加,结果存储在寄存器的字节中。|
|-| 将指针处的字节与存储中的字节相加,结果存储在寄存器的字节中。|
|*| 将指针处的字节与存储中的字节相乘,结果存储在寄存器的字节中。|
|/| 将指针处的字节与存储中的字节相除,结果存储在寄存器的字节中。|
|@| 修饰符存储处的数值不用转换ASCII码,以数字类型输入以及输出|
|A| 表示寄存器|
|?| 读取寄存器的值到指针处的字节 |
|!|存储寄存器的值到指针处的字节|
|$| 变量前缀|
|\[\]\(\)| 限制变量操作范围|
|&| 初始化数据|
|^| 指针指向变量的起始位置|
|B| 根据当前指针指向的值进行不同跳转|
|#| 条件语句结束|
|V| 跳转到条件语句结束|
|E| 程序立刻终止|## Parser
使用递归下降解析器。
## Backend
使用 Go 语言解释执行。同时也提供了 C 语言后端,作为编译执行的可选项。
## Run
```bash
cd wen/
go build
wen sourcename.wen
```或者
```bash
go run "wen\main.go" -c "wen\1.wen"
```或者
```bash
go run main.go -d "llllllllbillllbillilllilllilaaaaeuililieiilbauaeuiioieeeollllllloollloiioaeoaollloeeeeeeoeeeeeeeeoiiloillo"
```其中,`-c` 代表使用C语言后端,`-d` 代表输出抽象语法树。