Python 分词器单元测试:在生成的分词列表中插入一个分词

Python tokenizer unit testing: insert one token inside a generated token list

我实现了一个 python 分词器来从文本文件中提取分词。标记与 "fit to" 我为每个标记定义的模式(正则表达式)相关的字符串。我使用 python 包 ply 中的词法分析器功能来实现分词器。扫描文本文件后,所有找到的标记都作为生成器返回。对于单元测试,我想在 "returned token list" 中的定义位置插入额外的标记,以验证标记器在这种糟糕情况下是否能正确处理。

我如何使用 ply(python 模块 ply.lex)创建一个 "fake" 令牌对象,我可以将其插入到令牌列表中。

如果您想将标记插入到 lex 流中,您可以轻松地构建自己的标记。 (当然,您实际如何插入令牌取决于您。)

来自 ply 文档:

The tokens returned by lexer.token() are instances of LexToken. This object has attributes tok.type, tok.value, tok.lineno, and tok.lexpos.…

The tok.type and tok.value attributes contain the type and value of the token itself. tok.line and tok.lexpos contain information about the location of the token. tok.lexpos is the index of the token relative to the start of the input text.

此外,令牌有一个 lexer 属性,其值为创建令牌的词法分析器对象。

下面是创建 LexToken(改编自 lex.py)的示例,用于合成 error 标记(此时 self 是词法分析器对象):

tok = LexToken()
tok.value = self.lexdata[lexpos:]
tok.lineno = self.lineno
tok.type = 'error'
tok.lexer = self
tok.lexpos = lexpos