Python中Literal类Lexeme的求值含义及REPL验证疑问
Lexeme与Token的概念区分
维基百科对词素(lexeme)和标记(token)有明确区分:
词法分析可分为两个阶段:扫描阶段将输入字符串分割为称为lexeme的语法单元并分类到标记类;求值阶段将lexeme转换为处理后的值。
词素(lexeme)只是已知类型的字符序列,比如字符串字面量、字母序列这类。词法分析器需要通过第二阶段(求值器)处理词素的字符,生成对应的值;词素的类型结合这个值,就构成了可以传递给解析器的标记(token)。
你对token的理解是准确的:它是<类别, lexeme>到<类别, 值>的映射结果。Python中的标记类别包括:identifier(标识符)、keyword(关键字)、literal(字面量)、operator(运算符)、delimiter(分隔符)、NEWLINE、INDENT、DEDENT。
Literal类Lexeme的求值含义解答
你提出的“通过Python REPL输入lexeme查看其求值结果”的思路是完全可行的,你举的两个例子也能精准说明求值的核心逻辑:
字符串字面量示例
输入字符串lexeme:
>>> '''some ... text'''
得到输出:
'some\n text'
这个输出的字符串就是该lexeme的求值结果——词法分析的求值阶段会把原始带三个单引号的多行字符序列,处理成标准化的字符串对象:去除外层引号,将实际换行转换为\n转义序列,最终得到的就是可被Python直接使用的字符串值。
数字字面量示例
输入数字lexeme:
>>> 0b101
得到输出:
5
这里的5就是该lexeme的求值结果。求值阶段会把二进制格式的字符序列0b101转换为对应的十进制整数值,这个数值就是token中携带的核心数据,会被传递给解析器做后续处理。
内容的提问来源于stack exchange,提问作者Rodvi
相关产品推荐
相关产品推荐

