想要为Python中的源文件(例如Java或C ++)创建令牌生成器。遇到了Pygments,尤其是这些lexers。在documentation和在线上找不到如何使用词法分析器的示例。
想知道是否有可能在Python中实际使用Pygments来获取给定源文件的标记及其位置。
我在这里苦苦挣扎,因此如果有人可以提供一小段代码来详细说明上述内容,将不胜感激。
最佳答案
如果您查看Pygment的highlight
函数的源代码,实质上,它所做的就是通过get_tokens
方法将源文本传递到词法分析器实例中,该方法返回标记列表。然后将这些令牌传递给格式化程序。由于需要令牌列表,而没有格式化程序,因此只需要做第一部分。
因此,要使用C ++词法分析器(其中src
是包含您的C ++源代码的字符串):
from pygments.lexers.c_cpp import CppLexer
lexer = CppLexer()
tokens = lexer.get_tokens(src)
当然,可以使用lookup或guess词法分析器,而不是通过使用
get_lexer_by_name
,get_lexer_for_filename
,get_lexer_for_mimetype
,guess_lexer
或guess_lexer_for_filename
之一直接导入所需的词法分析器。例如:from pygments.lexers import get_lexer_by_name
Lexer = get_lexer_by_name('c++')
lexer = Lexer() # Don't forget to create an instance
tokens = lexer.get_tokens(src)
返回的令牌列表是否会为您提供所需的信息,这是另一回事。您必须尝试一下才能看到。