《Let’s Build A Simple Interpreter》学习笔记(三)

该笔记基于教程 Let’s Build A Simple Interpreter. from Ruslan’s Blog,原文使用 Python 为 Pascal 编写解释器,在该笔记中我将使用 Rust 进行解释器的编写。

1 核心概念

1.1 语法分析

根据语言的上下文无关文法,检查词法单元流的排列顺序是否符合语法规则,并将其组织成一个树形结构,称为语法树(Syntax Tree)

2 语法分析(编译第二步)

2.1 任务

token流 -> 语法树: 语法分析器(Parser)通过自顶向下(如 LL)或自底向上(如 LR)的算法,来解析词法单元流,并生成语法树。这棵树清晰地展示了代码的层次结构,例如,一个 if-else 语句是如何由条件、then 块和 else 块构成的。

Read more

《Let’s Build A Simple Interpreter》学习笔记(二)

该笔记基于教程 Let’s Build A Simple Interpreter. from Ruslan’s Blog,原文使用 Python 为 Pascal 编写解释器,在该笔记中我将使用 Rust 进行解释器的编写。

1 核心概念

1.1 词素(lexeme)

Token Sample lexemes
INTEGER 342, 9, 0, 17, 1
PLUS +
MINUS -
词素指的是形成一个 Token 的字符序列。

2 问题

对上节的解释器进行升级,解释器需要在上节的基础上实现如下拓展:

  1. 无视输入的任意位置的空格
  2. 实现多位数字的识别
  3. 实现两个正数的减法

3 代码实现

3.1 interpreter/token.rs

Read more

《Let’s Build A Simple Interpreter》学习笔记(一)

该笔记基于教程 Let’s Build A Simple Interpreter. from Ruslan’s Blog,原文使用 Python 为 Pascal 编写解释器,在该笔记中我将使用 Rust 进行解释器的编写。

1 核心概念

1.1 编译器与解释器的区别

编译器:先对源代码进行预处理翻译为机器码,再交给机器运行(预处理、执行)
解释器:直接执行源代码(边解释边执行)

1.2 标记(token)

概念: 一个具有类型的对象
结构: {TokenType, Value}

Value 在原字符串中形成一个词素(lexeme)

1.3 词法分析(lexical analysis)

概念: 将输入字符串分解成标记(token)的过程
工具: 词法分析器(lexer, scanner, tokenizer)

2 词法分析(编译第一步)

2.1 任务

字符流 -> token流: 指针在原字符串上移动,构建 token 流

Read more