【发布时间】:2014-07-20 22:53:43
【问题描述】:
有没有办法对 ply lexer 规则进行特殊处理?
t_IDENT = r'[a-zA-Z_][0-9a-zA-Z_]*'
t_OPERATOR = r'[<>=/*+-]+'
t_DEFINE = r'='
t_PRODUCES = r'=>'
我想将运算符定义为所列字符的任意组合,除了= 和=> 有自己的特殊情况。例如:
a + b
# IDENT('a') OPERATOR('+') IDENT('b')
a ++=--> b
# IDENT('a') OPERATOR('++=-->') IDENT('b')
a == b
# IDENT('a') OPERATOR('==-->') IDENT('b')
a => b
# IDENT('a') PRODUCES('=>') IDENT('b')
a = b
# IDENT('a') DEFINE('=') IDENT('b')
a >= b
# IDENT('a') OPERATOR('>=') IDENT('b')
a <=> b
# IDENT('a') OPERATOR('<=>') IDENT('b')
【问题讨论】:
-
没关系,这与上述 SO 问题中的保留字问题基本相同,也在此处的文档中:dabeaz.com/ply/ply.html#ply_nn6