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

时间:2015-12-03 12:37:55

标签: python unit-testing tokenize ply

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

我如何创造一个"假的"带有ply(python模块ply.lex)的令牌对象,我可以将其插入到令牌列表中。

1 个答案:

答案 0 :(得分:0)

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

来自ply文档:

  

lexer.token()返回的令牌是LexToken的实例。此对象包含tok.typetok.valuetok.linenotok.lexpos属性。...

     

tok.typetok.value属性包含令牌本身的类型和值。 tok.linetok.lexpos包含有关令牌位置的信息。 tok.lexpos是令牌相对于输入文本开头的索引。

此外,令牌具有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 lexer对象):

  SELECT * FROM cat_items WHERE sub_cat = `Men's Clothing` AND cat_id = '3'