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 .... 

Я хотел бы добиться этого, например. string: NS_XYZ идентифицируется как «IDENTIFIER», а одиночный NS_, окруженный пробелами, обозначается как «UN_1».

Как я могу справиться с этим? В настоящее время строка NS_XYZ просто разбивается на два токена UN1 и IDENTIFIER

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

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

Замечание: для вопросов PLY группа google pack-hack – хорошее место, чтобы задать вопросы, связанные с PLY.