Я пишу парсер, используя PLY. Вопрос похож на этот Как написать регулярное выражение для соответствия строковому литералу, где экранирование является удвоением символа кавычки?. Однако я использую двойные кавычки для открытия и закрытия строки. Например:
"Я не знаю, что такое \"А\""
Я определяю обычный строковый лексер как:
t_NORMSTRING = r'"([^"\n]|(\\"))*"$'
и у меня есть другой лексер для переменной:
def t_VAR(t):
r'[a-zA-Z_][a-zA-Z_0-9]*'
Проблема в том, что мой лексер не распознает «Я не знаю, что такое \"A\"» как токен NORMSTRING. Он возвращает ошибку
Illegal character '"' at 1
Syntax error at 'LexToken(VAR,'do',10,210)'
Пожалуйста, дайте мне знать, почему это неправильно.