Я пишу лексический анализатор для Python 2.7. У меня проблема с регулярным выражением для длинных строк. Вот код, который мне нужен для этого вида строк:
ESCAPESEQ \\\x
SHORTSTRINGITEM {SHORTSTRINGCHAR}|{ESCAPESEQ}
SHORTSTRING (\'{SHORTSTRINGITEM}*\')|(\"{SHORTSTRINGITEM}*\")
LONGSTRINGCHAR [^\\(\'\'\')(\"\"\")]
LONGSTRINGITEM {LONGSTRINGCHAR}|{ESCAPESEQ}
LONGSTRING (\'\'\'{LONGSTRINGITEM}*\'\'\')|(\"\"\"{LONGSTRINGITEM}*\"\"\")
LONGSTRINGLITERAL {STRINGPREFIX}?{LONGSTRING}
Если я анализирую код Python, в котором две длинные строки разделены другими токенами, мой анализатор возвращает две длинные строки и код между ними, как в токене. Это потому, что Flex пытается вернуть максимально возможное совпадение. Однако я хочу вернуть самое короткое совпадение только для этой длинной строки токена.
Спасибо за ответы.