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.