我有一个用 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
,可能是因为它被匹配为 aCOMMAND
而不是STRING
有没有办法让 PLY 进行尽可能大的匹配?