请帮忙
模块标记化中有许多标记,如STRING,BACKQUOTE,AMPEREQUAL等。
>>> import cStringIO
>>> import tokenize
>>> source = "{'test':'123','hehe':['hooray',0x10]}"
>>> src = cStringIO.StringIO(source).readline
>>> src = tokenize.generate_tokens(src)
>>> src
<generator object at 0x00BFBEE0>
>>> src.next()
(51, '{', (1, 0), (1, 1), "{'test':'123','hehe':['hooray',0x10]}")
>>> token = src.next()
>>> token
(3, "'test'", (1, 1), (1, 7), "{'test':'123','hehe':['hooray',0x10]}")
>>> token[0]
3
>>> tokenize.STRING
3
>>> tokenize.AMPER
19
>>> tokenize.AMPEREQUAL
42
>>> tokenize.AT
50
>>> tokenize.BACKQUOTE
25
这就是我的实验。但我无法找到他们的意思?
从那里我将理解这一点。我需要立即解决。
答案 0 :(得分:3)
您需要阅读python的代码tokenizer.c以了解详细信息。 只需搜索您想知道的关键字。应该不难。
答案 1 :(得分:3)
各种AMPER,BACKQUOTE等值对应于python令牌/运算符的相应符号的标记号。即AMPER =&amp; (&符号),AMPEREQUAL =“&amp; =”。
但是,你实际上并不需要关心这些。它们由内部C tokeniser使用,但python包装器简化了输出,将所有运算符符号转换为OP
标记。您可以使用令牌模块的tok_name字典将符号标记ID(每个标记元组中的第一个值)转换为符号名称。例如:
>>> import tokenize, token
>>> s = "{'test':'123','hehe':['hooray',0x10]}"
>>> for t in tokenize.generate_tokens(iter([s]).next):
print token.tok_name[t[0]],
OP STRING OP STRING OP STRING OP OP STRING OP NUMBER OP OP ENDMARKER
作为快速调试语句来更好地描述标记,您还可以使用tokenize.printtoken。这是没有记录的,看起来它在python3中不存在,所以不要依赖它来生成代码,但是为了快速查看令牌的含义,你可能会发现它很有用:
>>> for t in tokenize.generate_tokens(iter([s]).next):
tokenize.printtoken(*t)
1,0-1,1: OP '{'
1,1-1,7: STRING "'test'"
1,7-1,8: OP ':'
1,8-1,13: STRING "'123'"
1,13-1,14: OP ','
1,14-1,20: STRING "'hehe'"
1,20-1,21: OP ':'
1,21-1,22: OP '['
1,22-1,30: STRING "'hooray'"
1,30-1,31: OP ','
1,31-1,35: NUMBER '0x10'
1,35-1,36: OP ']'
1,36-1,37: OP '}'
2,0-2,0: ENDMARKER ''
您为每个令牌获取的元组中的各种值按顺序排列:
答案 2 :(得分:2)
Python的词汇分析(包括令牌)记录在http://docs.python.org/reference/lexical_analysis.html。正如http://docs.python.org/library/token.html#module-token所说,“请参阅Python发行版中的文件Grammar / Grammar,了解语言语法上下文中名称的定义。”。