Я анализирую исходный файл и хочу "подавить" строки. Под этим я подразумеваю преобразование каждой строки, такой как «bla bla bla + / *», в нечто вроде «строки», которая является детерминированной и не содержит никаких символов, которые могут запутать мой синтаксический анализатор, потому что меня не волнует значение строки. Одной из проблем здесь является форматирование строки с использованием, например, "% s", смотрите мое замечание по этому поводу ниже.
Возьмем, к примеру, следующий псевдокод, который может быть содержимым файла, который я анализирую. Предположим, что строки начинаются с ", а экранирование" символа выполняется "":
print(i)
print("hello**")
print("hel"+"lo**")
print("h e l l o "+
"hello\n")
print("hell""o")
print(str(123)+"h e l l o")
print(uppercase("h e l l o")+"g o o d b y e")
Должен быть преобразован в следующий результат:
print(i)
print("string")
print("string"+"string")
print("string"
"string")
print("string")
print(str(123)+"string")
print(uppercase("string")+"string")
В настоящее время я рассматриваю это как особый случай в коде (то есть обнаружение начала строки и «ручной» запуск до ее конца с несколькими дополнительными случаями в пути). Если есть функция библиотеки Python, которую я могу использовать, или хорошее регулярное выражение, которое может сделать мой код более эффективным, это было бы здорово.
Несколько замечаний:
- Мне бы хотелось, чтобы символ «начало строки» был переменной, например "против".
- На данном этапе я не разбираю код Python, но планирую, и там проблема, очевидно, становится более сложной, поскольку строки могут начинаться несколькими способами и должны заканчиваться способом, соответствующим началу. Я не пытаюсь разобраться с этим прямо сейчас, но если есть какие-то хорошо зарекомендовавшие себя лучшие практики, я бы хотел об этом узнать.
- В этом «подавлении» меня больше всего беспокоит случай форматирования строк с подобными «% s», которые являются значимыми токенами. Я в настоящее время не имею дело с этим и не полностью продумал это, но если у кого-то из вас есть предложения о том, как справиться с этим, это было бы здорово. Обратите внимание, что меня не интересует конкретный тип или форматирование токенов в строке, мне достаточно знать, что в строке есть токены (сколько). Заметьте, что здесь может быть важно: мой токенизатор не является вложенным, потому что моя цель довольно проста (я ничего не собираю ...).
- Я не совсем уверен насчет экранирования символа стартовой строки. Что бы вы сказали, как это распространено в большинстве языков программирования? Достаточно ли предположения о двойном вхождении (например, "") или любом наборе из двух символов (например, \ ")? Нужно ли рассматривать другие случаи (например, языки Java, C / C ++, PHP, C #) )