【问题标题】:What is the difference between NL and NEWLINE in tokenizer.py?tokenizer.py 中的 NL 和 NEWLINE 有什么区别?
【发布时间】:2014-12-09 15:21:17
【问题描述】:

我正在尝试为 Java 重写 tokenizer.py,以便我可以在 Java 中解析 Python,但我不明白源代码中 NLNEWLINE 之间的区别。它们似乎意味着同样的事情,但如果他们这样做了,那么哪里有两个令牌?

【问题讨论】:

    标签: python tokenize


    【解决方案1】:

    一些谷歌搜索提供了这个答案:

    用于指示非终止换行符的标记值。 NEWLINE 标记表示 Python 代码逻辑行的结束;当逻辑代码行跨越多条物理行时,会生成 NL 令牌。

    正如这里所说:

    https://docs.python.org/2/library/tokenize.html

    更多详细信息可以在这里找到:

    Python 2 newline tokens in tokenize module

    【讨论】:

    • 哦,我刚刚离线看这个,没有互联网。我应该再次阅读文档。谢谢!
    【解决方案2】:

    除了marsh的回答,如果你查看代码,你可以看到line 577有区别(其他NL出现在in (NEWLINE, NL)):

    yield TokenInfo(NL if parenlev > 0 else NEWLINE,
           token, spos, epos, line)
    

    parenlev 跟踪括号的级别:

    if initial in '([{':
        parenlev += 1
    elif initial in ')]}':
        parenlev -= 1
    

    所以NEWLINE 表示“语句”的结束,NL 表示行的结束,但不是语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      相关资源
      最近更新 更多