Я пишу синтаксический анализатор с помощью сгиба, который должен определить строковые литералы ФОРТРАНА. Они заключаются в кавычки с одинарными кавычками с символом ESC, удвоенным одинарные кавычки. т.е.
'I don''t understand what you mean'
допустимая завершенная строка ФОРТРАНА.
Сгиб берет вход в регулярном выражении. Моя попытка до сих пор не работает, и я не понимаю почему.
t_STRING_LITERAL = r"'[^('')]*'"
Какие-либо идеи?
Строковый литерал - это:
Таким образом, наш регекс:
r"'(''|[^'])*'"
Вы хотите что-то вроде этого:
r"'([^']|'')*'"
Это говорит о том, что внутри одной цитаты вы можете иметь двойные кавычки или символ нецитали.
Кронштейны определяют класс символов, в котором вы перечисляете символы, которые могут или не могут совпадать. Это не позволяет ничего сложнее, чем это, поэтому пытаясь использовать скобки и соответствовать последовательности нескольких символов ('')
не работает. Вместо этого ваш класс [^ ('')]
класс символов эквивалентен [^ '()]
, i.e. Это совпадает с ни одной цитатой или левой или правой скобками.