使用Python中的Pygments进行Tokenizer

时间:2016-04-22 18:46:17

标签: python tokenize pygments

想要在Python中为源文件(例如Java或C ++)创建一个标记器。遇到了Pygments,特别是这些lexers。我找不到documentation的例子和网上有关如何使用词法分析器的例子。

想知道是否可以在Python中实际使用Pygments,以便获取给定源文件的标记及其位置

我正在努力解决这里的基础知识,所以如果有人能提供一小部分代码,详细说明上述内容,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果你看一下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_mimetype中的一个直接导入所需的词法分析器, guess_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)

返回的令牌列表是否会为您提供您想要的另一件事。你必须尝试看看。

答案 1 :(得分:1)

如果要对Python代码进行标记,您可能希望使用tokenize模块:https://docs.python.org/2/library/tokenize.html。否则PyParsing会创建易于理解的词法分析器......