https://github.com/SyMind/stone-lang
TypeScript 实现《两周自制脚本语言》书中的 stone 语言。
https://github.com/SyMind/stone-lang
Last synced: 8 months ago
JSON representation
TypeScript 实现《两周自制脚本语言》书中的 stone 语言。
- Host: GitHub
- URL: https://github.com/SyMind/stone-lang
- Owner: SyMind
- License: mit
- Created: 2021-04-03T11:13:36.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-04-20T00:01:17.000Z (over 4 years ago)
- Last Synced: 2025-04-09T07:23:59.610Z (9 months ago)
- Language: TypeScript
- Homepage:
- Size: 213 KB
- Stars: 13
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# stone-lang
TypeScript 实现《两周自制脚本语言》书中的 stone 语言。
## stone 语言的语法定义
### BNF 中用到的元字符
| - | - |
| - | - |
| { pat } | 模式 pat 至少重复 0 次 |
| [ pat ] | 与重复出现 0 次或 1 次的模式 pat 匹配 |
| pat1 \| pat2 | 与 pat1 或 pat2 匹配 |
| () | 将括号内视为一个完整的模式 |
### Basic Parser
```
primary : "(" expr ")" | NUMBER | IDENTIFIER | STRING
factor : "-" primary | primary
expr : factor { OP factor }
block : "{" [ statement ] {(";" | EOL) [ statement ]} "}"
simple : expr
statement : "if" expr block [ "else" block ]
| "while" expr block
| simple
program : [ statement ] (";" | EOL)
```
### Func Parser
```
param : IDENTIFIER
params : param { "," param }
param_list : "(" [ params ] ")"
def : "def" IDENTIFIER param_list block
args : expr { "," expr }
postfix : "(" [ args ] ")"
primary : ( "(" expr ")" | NUMBER | IDENTIFIER | STRING ) { postfix }
simple : expr [ args ]
porgram : [ def | statement ] (";" | EOL)
```
### Closure Parser
```
primary : " func " param_list block
| 原本的 primary 定义
```
### Class Parser
```
member : def | simple
class_body : "{" [ memeber ] { ( ";" | EOL ) } "}"
defclass : "class" IDENTIFIER [ "extends" IDENTIFIER ] class_body
postfix : "." IDENTIFIER | "(" [ args ] ")"
program : [ defclass | def | statement ] ( ";" | EOL )
```
## License
[MIT](https://github.com/SyMind/stone/blob/main/LICENSE)