lexeme和token

最近在看《Crafting Interpreters》,梳理了一下 lexeme 和 token。

lexeme

定义

源代码中的"连续字符序列"。

示例

复制代码
a = 1
sum = a + 2

上面两行代码总共包含 8 个 lexeme: a = 1 sum = a + 2。

token

定义

将 lexeme 分类并附加一些额外的属性就得到 token。根据定义,token 包含两部分:类别(token type, 如:IDENTIFIER, STRING, NUMBER... )和可选属性(如:lexeme, literal, line)

示例

复制代码
a = 1
sum = a + 2

上面两行代码总共包含 8 个 token: a = 1 sum = a + 2。

复制代码
class Token:
    # 这里的 literal Java 里面用的类型是 Object, Python 里面类型注解暂时用 Any
    def __init__(self, token_type: TokenType, lexeme: str, literal: Any, line: int) -> None:
        self.token_type = token_type
        self.lexeme  = lexeme
        self.literal = literal
        self.line = line

    def __str__(self) -> str:
        return f'{self.token_type} {self.lexeme} {self.literal} {self.line}'

假设 token 的定义如上,那么 第一个 token a 的 token_type 为 identifier, lexeme 为 "a", literal 为 "a", line(行号) 为 1。

欢迎搜索及关注:编程人(a_codists)

相关推荐
Warson_L10 小时前
高性能架构设计
python·go
databook11 小时前
新数据到手,先跑哪几步检查
python·数据分析
czq_268671948711 小时前
Python打卡第46天
开发语言·python
Flynt13 小时前
日涨4000星的OSINT工具,我拿Linus的用户名和一个随机字符串实测了一遍
python·安全
曲径海盗15 小时前
【Python 学习第 53 天】列表基础
python·学习笔记·编程入门
Dumbness15 小时前
群里 @ 机器人发"查订单",指令一条都没命中:微信群机器人在路由前漏掉的几步归一化
python·微信
用户16148409554516 小时前
用 M4 Pro 跑羽毛球视频 AI 分析(二):TrackNet MPS 加速 3.2 倍、卡尔曼滤波补漏与自动回合剪辑
python
用户40199255686116 小时前
基于对话树回溯的社媒评论流买方意图识别与噪音过滤实践
python
用户03321266636716 小时前
使用 Python 加密或解密 PDF 文档
python
小七-七牛开发者16 小时前
让 Go 走得更远:用 LLGo 打通 Go 与 C/C++/Python 生态
python·编程·编译器·llvm·llgo