4.19 其他问题

最后更新于:2022-04-01 01:10:11

* lexer需要输入的是一个字符串。好在大多数机器都有足够的内存,这很少导致性能的问题。这意味着,lexer现在还不能用来处理文件流或者socket流。这主要是受到re模块的限制。 * lexer支持用Unicode字符描述标记的匹配规则,也支持输入字串包含Unicode * 如果你想要向`re.compile()`方法提供flag,使用reflags选项:lex.lex(reflags=re.UNICODE) * 由于lexer是全部用Python写的,性能很大程度上取决于Python的re模块,即使已经尽可能的高效了。当接收极其大量的输入文件时表现并不尽人意。如果担忧性能,你可以升级到最新的Python,或者手工创建分析器,或者用C语言写lexer并做成扩展模块。 如果你要创建一个手写的词法分析器并计划用在yacc.py中,只需要满足下面的要求: * 需要提供一个token()方法来返回下一个标记,如果没有可用的标记了,则返回None。 * token()方法必须返回一个tok对象,具有type和value属性。如果行号需要跟踪的话,标记还需要定义lineno属性。
';