4.11 @TOKEN装饰器
最后更新于:2022-04-01 01:09:52
在一些应用中,你可能需要定义一系列辅助的记号来构建复杂的正则表达式,例如:
~~~
digit = r'([0-9])'
nondigit = r'([_A-Za-z])'
identifier = r'(' + nondigit + r'(' + digit + r'|' + nondigit + r')*)'
def t_ID(t):
# want docstring to be identifier above. ?????
...
~~~
在这个例子中,我们希望ID的规则引用上面的已有的变量。然而,使用文档字符串无法做到,为了解决这个问题,你可以使用`@TOKEN`装饰器:
~~~
from ply.lex import TOKEN
@TOKEN(identifier)
def t_ID(t):
...
~~~
装饰器可以将identifier关联到t_ID()的文档字符串上以使lex.py正常工作,一种等价的做法是直接给文档字符串赋值:
~~~
def t_ID(t):
...
t_ID.__doc__ = identifier
~~~
注意:@TOKEN装饰器需要Python-2.4以上的版本。如果你在意老版本Python的兼容性问题,使用上面的等价办法。