许多编程语言的语法要求它们根据"maximal munch"原则进行标记。也就是说,这些令牌是根据输入流中可能的最大字符数构建的。PLY的词法分析器是否支持“maximal munch”?
PLY的词法分析器似乎不适用这个原理。例如:
import ply.lex as lex
tokens = ('ASSIGNMENT', 'EQUALITY')
t_ASSIGNMENT = r'[+\-*/]?='
t_EQUALITY = r'=='
lexer = lex.lex()
lexer.input('==')
for tok in lexer:
print(tok)
据“最大适合”,这个代码的输出应为LexToken(EQUALITY,'==',1,0)
,但它是LexToken(ASSIGNMENT,'=',1,0) LexToken(ASSIGNMENT,'=',1,1)
。这似乎是因为词法分析器倾向于ASSIGNMENT
而不是EQUALITY
--优先考虑较长的正则表达式而不是较长的匹配。
PLY的词法分析器可以遵循“最大蒙克”原则吗?
如果没有,是否有指示应如何设置标记以避免“上述不足最大的蒙克”情况?