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。

20140101_codists_qr

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

posted @ 2026-09-30 23:49  codists  阅读(4)  评论(0)    收藏  举报