【发布时间】:2019-09-24 02:05:55
【问题描述】:
我编写了许多简单的标记器和递归下降解析器,因此我熟悉它们如何工作的基本概念。但是当我偶然发现以下 Rust 代码时,我感到很惊讶:
Option<Option<i32>>
我们知道 Rust 有一个 >> 移位运算符,所以我认为一个天真的标记器会在这里输出一个 >> 标记,解析器会将其视为错误(因为它需要两个 > 标记)。
但很明显,Rust 编译器理解这种情况并正确处理它。这是怎么回事?
- 标记器是否保持某种状态,不知何故知道它需要关闭尖括号?
- 解析器是否检查
>>并将其分解为两个令牌,然后推送回令牌流? - 或者完全是别的什么?
【问题讨论】:
标签: parsing compilation rust tokenize lexical-analysis