У меня есть парсер, написанный на 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 взять максимально возможное совпадение?