Parsing 解释lex.py中reserved.get(t.value,';ID';)的语法

Parsing 解释lex.py中reserved.get(t.value,';ID';)的语法,parsing,python-2.7,tokenize,lex,lexer,Parsing,Python 2.7,Tokenize,Lex,Lexer,代码取自ply.lex文档: 对于保留的字,我们需要更改标记类型。通过将t.value传递给它来执行reserved.get(),这是可以理解的。现在它应该返回保留规范第二列中的实体 但是为什么我们要传递给它ID?它意味着什么?它解决了什么问题?第二个参数指定如果字典中不存在键,则返回的值。因此,在这种情况下,如果t.value的值在reserved字典中不作为键存在,则将返回字符串'ID' 换句话说,a.get(b,c)当a是一个dict时,如果a else c中的b,则它大致相当于a[b](

代码取自ply.lex文档:

对于
保留的
字,我们需要更改标记
类型
。通过将
t.value
传递给它来执行
reserved.get()
,这是可以理解的。现在它应该返回
保留规范
第二列中的实体


但是为什么我们要传递给它
ID
?它意味着什么?它解决了什么问题?

第二个参数指定如果字典中不存在键,则返回的值。因此,在这种情况下,如果
t.value
的值在
reserved
字典中不作为键存在,则将返回字符串
'ID'

换句话说,
a.get(b,c)
a
是一个dict时,如果a else c中的b,则它大致相当于
a[b](除非它可能更有效,因为它在成功的情况下只会查找一次键)

reserved = {
   'if' : 'IF',
   'then' : 'THEN',
   'else' : 'ELSE',
   'while' : 'WHILE',
   ...
}

tokens = ['LPAREN','RPAREN',...,'ID'] + list(reserved.values())

def t_ID(t):
    r'[a-zA-Z_][a-zA-Z_0-9]*'
    t.type = reserved.get(t.value,'ID')    # Check for reserved words
    return t