CodeGetters / compiler-example

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

compiler-example

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

A basic compiler for learning written in typescript language

yarn tsc

yarn check

yarn dev
  • 预处理
  • 词法分析
  • 语法分析

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

// 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;
// example/lexicalOutput.json
{
    "tokens": [
        {
            "type": "keyword",
            "val": "let",
            "line": 1
        }
    ]
}

C 语言子集语法 EBNF 描述

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

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

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

About

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

License:MIT License


Languages

Language:TypeScript 94.1%Language:JavaScript 5.9%