许多编程语言的语法要求按照“最大匹配原则”对它们进行标记化。也就是说,标记应该从输入流中尽可能多地构建字符。
PLY的词法分析器似乎没有应用这个原则。例如:
根据“最大匹配原则”,此代码的输出应该是
是否有可能让PLY的词法分析器遵循“最大匹配原则”?
如果不行,是否有任何指导方针可以避免出现像上面那种“不够最大匹配”的情况?
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的词法分析器遵循“最大匹配原则”?
如果不行,是否有任何指导方针可以避免出现像上面那种“不够最大匹配”的情况?