0
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 = ()会影响偏好顺序吗?

4

1 回答 1

1

根据文档

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

  1. 函数定义的所有标记都按照它们在词法分析器文件中出现的顺序添加。
  2. 接下来添加由字符串定义的标记,方法是按正则表达式长度递减的顺序对它们进行排序(首先添加较长的表达式)。

如果这是正确的,则函数定义的标记具有比字符串定义的标记更高的“优先级”。

于 2014-08-21T21:40:18.090 回答