PLY中的令牌匹配顺序

时间:2014-07-23 05:47:04

标签: ply

我有一个用PLY编写的解析器,它具有以下标记定义

def t_COMMAND(t):
    r'create|show'
    return t

def t_SCOPE(t):
    r'user|domain'
    return t

def t_STRING(t):
    r'[a-zA-Z_@\*\.]*'
    return t

我正在尝试解析以下字符串

show user where created_on = foo

这是我的语法

S:COMMAND SCOPE FILTER;
FILTER:WHERE EXP |;
EXP:STRING OP STRING
...

我在created_on令牌上收到语法错误,可能是因为它被匹配为COMMAND而不是STRING

有没有办法让PLY采取最大可能的匹配?

1 个答案:

答案 0 :(得分:0)

找到两种可能的方法

  • 使用保留字元组并使用Specification of tokens

  • 中的令牌列表附加它
  • 如果可能,请将STRING的引号添加为'[a-zA-Z_@\*\.]*',以便区别于COMMAND

我选择了第二种方法,因为我有很多所谓的保留词。