我有一个用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采取最大可能的匹配?
答案 0 :(得分:0)
找到两种可能的方法
使用保留字元组并使用Specification of tokens
如果可能,请将STRING
的引号添加为'[a-zA-Z_@\*\.]*'
,以便区别于COMMAND
我选择了第二种方法,因为我有很多所谓的保留词。