Python PLY Lex неоднозначность

У меня проблема с неоднозначностью на уровне токенов.

Проблема выглядит так. Мой код выглядит так, чтобы токен 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.

1 ответ

Решение

Если вы хотите получить "один NS_, окруженный пробелами", вы можете добавить класс символов пробела в строку токена:

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

Примечание: для вопросов PLY группа Google ply-hack является хорошим местом для вопросов, связанных с PLY.

Другие вопросы по тегам