我实现了一个python tokenizer来从文本文件中提取标记。令牌与适合于"的字符串相关。我为每个标记定义的模式(正则表达式)。我使用python包ply中的词法分析器功能来实现tokenizer。扫描文本文件后,所有找到的标记都将作为生成器返回。对于单元测试,我想在"返回的令牌列表中定义的位置插入额外的令牌"验证令牌化程序是否在这种恶劣的情况下正确处理。
我如何创造一个"假的"带有ply(python模块ply.lex)的令牌对象,我可以将其插入到令牌列表中。
答案 0 :(得分:0)
如果要将标记插入到lex流中,可以轻松构建自己的标记。 (当然,你如何插入令牌取决于你。)
来自ply
文档:
lexer.token()
返回的令牌是LexToken
的实例。此对象包含tok.type
,tok.value
,tok.lineno
和tok.lexpos
属性。...
tok.type
和tok.value
属性包含令牌本身的类型和值。tok.line
和tok.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'