Python 铺层中的特殊情况lexer规则
有没有办法在特殊情况下使用ply lexer规则Python 铺层中的特殊情况lexer规则,python,lexer,ply,Python,Lexer,Ply,有没有办法在特殊情况下使用ply lexer规则 t_IDENT = r'[a-zA-Z_][0-9a-zA-Z_]*' t_OPERATOR = r'[<>=/*+-]+' t_DEFINE = r'=' t_PRODUCES = r'=>' 是的,您获得运算符令牌而不是预期的生成/定义的原因是PLY lexer的令牌优先规则: 在内部,lex.py使用re模块进行模式匹配。什么时候 在构建主正则表达式时,将在 顺序如下: 所有由函数定义的标记都按照它们的
t_IDENT = r'[a-zA-Z_][0-9a-zA-Z_]*'
t_OPERATOR = r'[<>=/*+-]+'
t_DEFINE = r'='
t_PRODUCES = r'=>'
是的,您获得
运算符
令牌而不是预期的生成
/定义
的原因是PLY lexer的令牌优先规则:
在内部,lex.py使用re
模块进行模式匹配。什么时候
在构建主正则表达式时,将在
顺序如下:
def t_DEFINE(t):
r'='
return t
def t_PRODUCES(t):
r'=>'
return t
我删除了自动
t_DEFINE
和t_生成的
规则,并使用保留字技术处理特殊情况:
special_operators = {'=': 'DEFINE',
'=>': 'PRODUCES'}
def t_OPERATOR(t):
r'[<>=/*+-]+'
t.type = special_operators.get(t.value, t.type)
return t
特殊_运算符={'=':'DEFINE',
“=>”:“产生”}
def t_操作员(t):
r'[=/*+-]+'
t、 type=特殊_运算符.get(t.value,t.type)
返回t
不要紧的可能重复,这与上述SO问题中的保留字问题基本相同,也在此处的文档中:
special_operators = {'=': 'DEFINE',
'=>': 'PRODUCES'}
def t_OPERATOR(t):
r'[<>=/*+-]+'
t.type = special_operators.get(t.value, t.type)
return t