【发布时间】:2014-12-09 15:21:17
【问题描述】:
我正在尝试为 Java 重写 tokenizer.py,以便我可以在 Java 中解析 Python,但我不明白源代码中 NL 和 NEWLINE 之间的区别。它们似乎意味着同样的事情,但如果他们这样做了,那么哪里有两个令牌?
【问题讨论】:
我正在尝试为 Java 重写 tokenizer.py,以便我可以在 Java 中解析 Python,但我不明白源代码中 NL 和 NEWLINE 之间的区别。它们似乎意味着同样的事情,但如果他们这样做了,那么哪里有两个令牌?
【问题讨论】:
一些谷歌搜索提供了这个答案:
用于指示非终止换行符的标记值。 NEWLINE 标记表示 Python 代码逻辑行的结束;当逻辑代码行跨越多条物理行时,会生成 NL 令牌。
正如这里所说:
https://docs.python.org/2/library/tokenize.html
更多详细信息可以在这里找到:
【讨论】:
除了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 表示行的结束,但不是语句。
【讨论】: