tokenizer.py中NL和NEWLINE有什么区别?

时间:2014-12-09 15:21:18

标签: python tokenize

我试图为Java重写tokenizer.py,所以我可以用Java解析Python,但我不理解NLNEWLINE之间的区别。资源。他们似乎意味着同样的事情,但如果他们做了那么那里有两个令牌?

2 个答案:

答案 0 :(得分:3)

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

用于表示非终止换行符的标记值。 NEWLINE标记表示Python代码逻辑行的结束;当在多条物理线路上继续执行逻辑代码行时,会生成NL令牌。

如此处所述:

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

可以在此处找到更多深度信息:

Python 2 newline tokens in tokenize module

答案 1 :(得分:1)

除了沼泽的回答之外,如果您查看代码,您会发现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表示行的结尾,但不是语句。