Parsing 解释lex.py中reserved.get(t.value,';ID';)的语法
代码取自ply.lex文档: 对于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](
保留的
字,我们需要更改标记类型
。通过将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