AZJIO
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору TheBarmaley Цитата: запросто может быть и внутри камента | да, но если делать посимвольный разбор, то когда мы идём от начала файла по символам, то при попадании на комент, тупо запускаем цикл поиска конца комента. Как и любой анализатор будь то Scintilla или браузер, он также столкнувшись с коментом ищет его окончания и если его не будет, то весь код уйдёт в комент, так что дуракоустойчивость не сработает. Нашли завершение комента, выпрыгиваем из цикла поиска и продолжаем внешний цикл перебора символов. В данном случае мы пропускаем комент, неважно что в нём было. Аналогично и с кавычками. Но опять же можно попробовать как поведёт себя анализатор Scintilla/браузер на сбойном коде, возможно перенос строки не будет являться сбросом кавычек, если так, то нам опять нет смысла применять дуракоусточивость, если сам браузер это не применяет. В HTML тоже незакрытый тег может до конца файла применить его свойство, например если забыл закрыть жирный текст, то весь текст от открытия тега до конца документа жирный и сразу понятно где забыл закрыть (с css не проверял). В итоге я лишь предложил, если проще на регвыр, то оставить его, но часть вещей можно сделать на посимвольном разборе. То есть прошёлся по тексту, получил итоговый, а потом обработал регвыром, или наоборот, одно другому не мешает. Погугли "Лексический анализатор синтаксиса на python". По факту придётся вникать в сам язык. Я на нём мало практиковался и анализатор точно не делал, поэтому подсказать не могу, а по PureBasic могу всё подсказать, хоть регвыр дать в виде готового кода, хоть посимвольный анализатор. Что-то мне по запросу попадается токенезаторы ))), суть в следующем: код разбивается по элементам кода в массив, то есть класс как слово, комментарии как блок, строки в кавычках, строки в апострофах, операторы {}()[];: и т.д. потом пробегаясь по элементам и составляя их в последовательность мы можем вставить перед ним или после него пробелы, табуляции, переносы строк. Вот пример регвыр токенизатора, который я оптимизировал для PureBasic. Суть в том, что когда мы соединим элементы массива мы получим исходный код в оригинале. А в массиве он разделён на логические участки кода. | Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 20:32 04-09-2024 | Исправлено: AZJIO, 21:01 04-09-2024 |
|