4.10 构建和使用lexer
最后更新于:2022-04-01 01:09:50
函数`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对象的对应方法上。最好不要这样用,因为这种接口可能不知道在什么时候就失效(译者注:垃圾回收?)