【问题标题】:How to add keywords to tokenizer?如何将关键字添加到分词器?
【发布时间】:2013-02-18 01:18:49
【问题描述】:

我正在使用 generate_token 函数来标记特定代码。问题是我无法添加“打印”和“输入”作为关键字。它将它们作为 NAME 而不是关键字返回。如何添加这些令牌?

import token
import tokenize

try:
    from cStringIO import StringIO
except:
    from io import StringIO
file = open(filename)
characters = file.read()
file.close()
code_reader = StringIO(characters).readline

for num, (ttyp, ttok, _, _, _) in enumerate(tokenize.generate_tokens(code_reader)):
    print("%5d %15s %r" % (num, token.tok_name[ttyp], ttok))

【问题讨论】:

  • PS:你为什么要把文件读成一个字符串,然后再用StringIO把它变成一个类似文件的东西?

标签: python compiler-construction token tokenize


【解决方案1】:

tokenize 模块没有说明任何关于关键字的内容。所有关键字都作为 NAME 返回,然后您必须确定哪些是关键字,通常使用 keyword 模块。不过,如果您愿意,也可以使用其他方式。

【讨论】:

  • 什么时候应该使用关键字模块?在标记化模块之前?指定我想要“打印”和“输入”?如何使用关键字模块将这两个词添加为关键字。
  • 你试过运行你的代码吗?您会看到 ttype 是标识符和关键字的 NAME。然后,您可以根据自己的喜好决定哪些是关键字。
  • 是的,我尝试运行我的代码并将类型设为 NAME。我在 python doc 中看到了关键字模块,看到我们只能知道特定单词是否是关键字。没有将单词添加为关键字的功能。 “print”这个词也是 python 关键字,我仍然把它作为 NAME 输入。
  • @ThePresident:我一直在试图解释:tokenizer 不会将任何内容标记为关键字。所有标识符和关键字都以 NAME 形式返回。您必须决定哪些是关键字,哪些不是。大多数人通过使用关键字模块来做到这一点,但你可以随心所欲地做到这一点。您可能想检查该词是否在关键字模块中,或者该词是否为“输入”。这将满足您的标准。
猜你喜欢
  • 2019-11-18
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多