当我们在ply.lex中混合函数和字符串类型标记定义时,首选项的顺序是什么?

时间:2014-08-21 21:30:08

标签: python lex lexer ply

tokens = (
        NUMBER2,
        NUMBER1,
        )

def t_NUMBER1(t):
    r '[0-9]+'
    return t

t_NUMBER2 = r '[0-9][0-9]'

如果我在ply.lex中使用上述令牌规范,那么哪个令牌会获得更高的偏好? 我知道在函数的情况下,首先定义的函数具有更高的偏好 在字符串的情况下,较大的正则表达式具有较高的偏好。

当我混合使用both string and function type令牌规格时怎么办? tokens = ()元组中的顺序是否会影响首选项顺序?

1 个答案:

答案 0 :(得分:1)

根据the doc

  

在内部,lex.py使用re模块进行模式匹配。什么时候   构建主正则表达式,添加规则   以下顺序:

     
      
  1. 函数定义的所有标记的添加顺序与它们在词法分析器文件中的显示顺序相同。
  2.   
  3. 字符串定义的标记通过按正则表达式长度减少的顺序排序(添加更长的表达式)   第一)。
  4.   

如果这是正确的,由函数定义的标记具有更高的优先级"而不是字符串定义的那些。