ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
如果有必要的话,lexer对象可以通过`clone()`方法来复制: ~~~ lexer = lex.lex() ... newlexer = lexer.clone() ~~~ 当lexer被克隆后,复制品能够精确的保留输入串和内部状态,不过,新的lexer可以接受一个不同的输出字串,并独立运作起来。这在几种情况下也许有用:当你在编写的解析器或编译器涉及到递归或者回退处理时,你需要扫描先前的部分,你可以clone并使用复制品,或者你在实现某种预编译处理,可以clone一些lexer来处理不同的输入文件。 创建克隆跟重新调用lex.lex()的不同点在于,PLY不会重新构建任何的内部分析表或者正则式。当lexer是用类或者闭包创建的,需要注意类或闭包本身的的状态。换句话说你要注意新创建的lexer会共享原始lexer的这些状态,比如: ~~~ m = MyLexer() a = lex.lex(object=m) # Create a lexer b = a.clone() # Clone the lexer ~~~