【问题标题】:What are the last four tokens of Python 3.5 grammar?Python 3.5 语法的最后四个标记是什么?
【发布时间】:2015-10-16 23:02:48
【问题描述】:

https://docs.python.org/3.5/library/token.html

Python 3.5 语法的标记定义中的最后四个标记是什么?

【问题讨论】:

  • 如果您指的是token.OP、token.ERRORTOKEN、token.N_TOKENS和token.NT_OFFSET,那么您应该在您的问题中命名这些token,这样如果您的页面仍然有意义链接到以后的更改。
  • 您是否“请参阅 Python 发行版中的文件 Grammar/Grammar 以了解语言语法上下文中名称的定义”
  • 您可以通过标记一些代码并按代码行/列打印标记分配的输出来查看标记的使用方式,如上一个示例docs.python.org/3/library/tokenize.html 所示。
  • @TrisNefzger 虽然得到ERRORTOKEN 并发现你找不到最后两个,但需要大量的试验和错误。

标签: python parsing grammar python-3.5


【解决方案1】:

token.OP

是运算符标记的泛化。 tokenize 模块中也提到了这一点:

为简化标记流处理,所有运算符和分隔符标记都使用通用token.OP 标记类型返回。确切的类型可以通过检查从tokenize.tokenize() 返回的命名元组上的exact_type 属性来确定。

token.ERRORTOKEN

用于在解析器的标记化过程中标记错误。这主要用于生成abort the parsing process 的语法错误。

tokenize documentation中也提到过:

请注意,未闭合的单引号字符串不会引发错误。它们被标记为ERRORTOKEN,然后是其内容的标记。

token.N_TOKENS

只是定义的标记数。它在解析器中用于迭代令牌列表。

token.NT_OFFSET

token.h这样使用:

/* Special definitions for cooperation with parser */
#define NT_OFFSET       256

#define ISTERMINAL(x)       ((x) < NT_OFFSET)
#define ISNONTERMINAL(x)    ((x) >= NT_OFFSET)

它基本上将terminal and non-terminal tokens分开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2011-06-23
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多