牛骨文教育服务平台(让学习变的简单)

4.4 标记的值

标记被lex返回后,它们的值被保存在value属性中。正常情况下,value是匹配的实际文本。事实上,value可以被赋为任何Python支持的类型。例如,当扫描到标识符的时候,你可能不仅需要返回标识符的名字,还需要返回其在符号表中的位置,可以像下面这样写:

def t_ID(t):
    ...
    # Look up symbol table information and return a tuple
    t.value = (t.value, symbol_lookup(t.value))
    ...
    return t

需要注意的是,不推荐用其他属性来保存值,因为yacc.py模块只会暴露出标记的value属性,访问其他属性会变得不自然。如果想保存多种属性,可以将元组、字典、或者对象实例赋给value。