3

我对令牌级别的歧义有疑问。

问题看起来像这样。我的代码看起来像这样,因此令牌 t_UN1 具有更高的优先级。

t_ignore = ' \t\v\r' # whitespace 

....

def t_UN1(t): #NS_
    r'NS\_'
    return t
def t_IDENTIFIER(t):
    r'[a-zA-Z][a-zA-Z0-9_]*'
    return t

....

我想实现这一点,例如。字符串:NS_XYZ 被标识为“IDENTIFIER”,被空格包围的单个 NS_ 被标识为“UN_1”。

我该如何处理?目前字符串 NS_XYZ 被简单地分成两个标记 UN1 和 IDENTIFIER

4

1 回答 1

1

如果您希望获得“被空格包围的单个 NS_”,则可以将空格字符类添加到令牌字符串中:

def t_UN1(t): #NS_
    r'\s+NS\_\s+'
    return t

旁注:对于 PLY 问题,ply-hack google 小组是询问 PLY 相关问题的好地方。

于 2013-03-11T15:16:43.683 回答