Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/codegetters/compiler-example

A basic compiler for learning written in typescript language 一个使用TS编写用于学习的编译器
https://github.com/codegetters/compiler-example

compiler node typescript

Last synced: 28 days ago
JSON representation

A basic compiler for learning written in typescript language 一个使用TS编写用于学习的编译器

Awesome Lists containing this project

README

        

# compiler-example

一个由 TS 搭建的学习版编译器

A basic compiler for learning written in typescript language

```sh
yarn tsc

yarn check

yarn dev
```

- [x] 预处理
- [x] 词法分析
- [ ] 语法分析

What should be before running?
运行前代码是什么样的?

```js
// example/sourceRoutine.js
let a = 12;
let b = 14;

let c = a + b;
```

After running it will become...
代码运行后将变成...

```
// example/output.js
let a=12;let b=14;let c=a+b;
```

```json
// example/lexicalOutput.json
{
"tokens": [
{
"type": "keyword",
"val": "let",
"line": 1
}
]
}
```

C 语言子集语法 EBNF 描述

```txt
<语句> ∷= <变量>∶=<表达式> // 变量赋值
| if <表达式> <语句> // 条件语句
| if <表达式> <语句> else <语句> // 条件语句
<变量> ∷= i | i '['<表达式>']' // 对数组或列表的索引
<表达式> ∷= <项> | <表达式> + <项> // 单独的项或表达式 + 项(可以进行加法运算)
<项> ∷= <因子>| <项>*<因子> // 因子|项和因子(乘法运算)
<因子> ∷= <变量>| '('<表达式>')' //
```

这是一个简单的语法规则定义,描述了一个类似于编程语言中的语句、变量和表达式的结构。

- 1. `<语句> ::= <变量>∶=<表达式>`
这一行定义了一条语句的结构,它由一个变量和一个表达式组成,用冒号和等号连接。这可以表示给变量赋值的操作。
- 2. `<语句> ::= if <表达式> <语句>`
这一行定义了一个条件语句的结构,以关键字 "if" 开始,后面跟着一个表达式和一条语句。如果表达式的结果为真,就执行这条语句。
- 3. `<语句> ::= if <表达式> <语句> else <语句>`
这一行定义了一个条件语句的结构,与上一行类似,但多了一个 "else" 关键字和另一条语句。如果表达式的结果为真,执行第一条语句;否则,执行第二条语句。
- 4. `<变量> ::= i | i '['<表达式>']'`
这一行定义了变量的结构。变量可以是一个简单的标识符 "i",也可以是一个带有方括号的表达式,表示对一个数组或列表的索引。
- 5. `<表达式> ::= <项> | <表达式> + <项>`
这一行定义了表达式的结构。一个表达式可以是一个单独的项,或者是由一个表达式和一个加号连接的项。这表示可以进行加法运算。
- 6. `<项> ::= <因子> | <项>* <因子>`
这一行定义了项的结构。一个项可以是一个因子,或者由一个项、一个乘号和一个因子连接而成。这表示可以进行乘法运算。
- 7. `<因子> ::= <变量> | '(' <表达式> ')'`
这一行定义了因子的结构。一个因子可以是一个变量,或者是由一对括号括起来的表达式。这表示可以使用括号改变运算顺序。