4.10 构建和使用lexer
函数lex.lex()
使用Python的反射机制读取调用上下文中的正则表达式,来创建lexer。lexer一旦创建好,有两个方法可以用来控制lexer对象:
lexer.input(data)
重置lexer和输入字串lexer.token()
返回下一个LexToken类型的标记实例,如果进行到输入字串的尾部时将返回None
推荐直接在lex()函数返回的lexer对象上调用上述接口,尽管也可以向下面这样用模块级别的lex.input()和lex.token():
lex.lex()
lex.input(sometext)
while 1:
tok = lex.token()
if not tok: break
print tok
在这个例子中,lex.input()和lex.token()是模块级别的方法,在lex模块中,input()和token()方法绑定到最新创建的lexer对象的对应方法上。最好不要这样用,因为这种接口可能不知道在什么时候就失效(译者注:垃圾回收?)