想要为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)


当然,可以使用lookupguess词法分析器,而不是通过使用get_lexer_by_nameget_lexer_for_filenameget_lexer_for_mimetypeguess_lexerguess_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)


返回的令牌列表是否会为您提供所需的信息,这是另一回事。您必须尝试一下才能看到。

10-01 06:49