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的兼容性问题,使用上面的等价办法。
';