Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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编写用于学习的编译器
- Host: GitHub
- URL: https://github.com/codegetters/compiler-example
- Owner: CodeGetters
- License: mit
- Created: 2023-10-24T14:12:19.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-11-05T07:58:37.000Z (over 1 year ago)
- Last Synced: 2024-11-16T21:21:33.546Z (3 months ago)
- Topics: compiler, node, typescript
- Language: TypeScript
- Homepage:
- Size: 46.9 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# compiler-example
一个由 TS 搭建的学习版编译器
A basic compiler for learning written in typescript language
```sh
yarn tscyarn 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. `<因子> ::= <变量> | '(' <表达式> ')'`
这一行定义了因子的结构。一个因子可以是一个变量,或者是由一对括号括起来的表达式。这表示可以使用括号改变运算顺序。