我试图为Java重写tokenizer.py,所以我可以用Java解析Python,但我不理解NL
和NEWLINE
之间的区别。资源。他们似乎意味着同样的事情,但如果他们做了那么那里有两个令牌?
答案 0 :(得分:3)
一些谷歌搜索提供了这个答案:
用于表示非终止换行符的标记值。 NEWLINE标记表示Python代码逻辑行的结束;当在多条物理线路上继续执行逻辑代码行时,会生成NL令牌。
如此处所述:
https://docs.python.org/2/library/tokenize.html
可以在此处找到更多深度信息:
答案 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
表示行的结尾,但不是语句。