Чиним продвинутый редактор для A2: TFPET/TFXRef

Операционная система, написанная на языке Оберон и проект её перевода на русский язык
БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Чиним продвинутый редактор для A2: TFPET/TFXRef

Сообщение БудДен » 24.08.19 16:22

TFXRef - утилита, с помощью которой создан сайт http://bbos.org/
Она раньше работала, а теперь не работает.
Соответственно, была взята версия от 2012-10-22 и гоняем на ней.
Примерный алгоритм создания перекрёстных ссылок (пути относительно корня репозитория, который нужно взять с https://gitlab.com/budden/a2os-since-2008
  • git checkout 8f3ed154f7234deb8779ab730b8452dc55da4366
  • Запускаем WinAos/Aos.exe
  • PET.Open TFXRef.Mod
  • Создаём директорию WinAos/Xref
  • Создаём директорию xrefsource и копируем в неё все из Source, кроме FoxArrayBase.Mod
  • В конце файла TFXRef.Mod есть порядок действий, у меня он заработал в таком виде
    (вам понадобится заменить директорию, где развёрнут репозиторий)

    Код: Выделить всё

    TFAOParser.MakeSymbolFiles "C:/ob/a28/source" "*Oberon*"~ (* d:/release/*.Mod *)
    
    SystemTools.Free TFXRef TFDocGenerator~
    (* Eshho vykinutq FoxArrayBase.Mod *)
    TFXRef.MakeXRef "C:/ob/a28/xrefsource" "*Oberon*"~
    TFXRef.Generate HelloWorld.Mod ~
    TFXRef.Generate I386.VMWareTools.Mod ~
     TFXRef.Generate TFModuleTrees.Mod ~
      TFXRef.Generate String.Mod ~
    
Последний раз редактировалось БудДен 29.09.19 16:22, всего редактировалось 1 раз.

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним TFXRef

Сообщение БудДен » 24.08.19 17:15

Надо править BimboScanner, но похоже, что на сегодня всё.
Пытался найти, где в TFPET переход к определению, но нашёл только Control-Пробел - автодополнение, и к тому же нужно совершить какие-то магические действия для генерации и подключения инфы.

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним TFXRef

Сообщение БудДен » 21.09.19 15:48

Денис Будяк, [25.08.19 14:33]
А где-нибудь есть описание, как пользоваться TFPET? Явно нужны магические действия по созданию и поддержанию файлов ссылок, соответственно должна быть и инструкция.

Денис Будяк, [25.08.19 14:34]
Также неясна причина, по которой существует и TFPET, и PET.

Денис Будяк, [25.08.19 15:42]
Как проверить существование директории или как гарантировать существование директории?

Sergej Durmanov, [25.08.19 18:03]
[In reply to Денис Будяк]
Смотри FSTools

Sergej Durmanov, [25.08.19 18:04]
[In reply to Денис Будяк]
Вполне возможно, что это был очередной эксперимент

Денис Будяк, [25.08.19 22:09]
Чёй-то как-то не решается задачка про директорию.

Денис Будяк, [25.08.19 22:11]
Есть WinFS.CheckPath только, для других платформ не искал, но оно не обобщено.

Денис Будяк, [25.08.19 22:12]
Вероятно, придётся допиливать. Я всего-то навсего хотел создавать xref культурно, а не чтобы возникал красный экран, если сначала не создать директорию руками

Денис Будяк, [25.08.19 22:12]
Можно создат наугад и потом не проверять код возврата, но это непрофессионально :)

Ярослав, [25.08.19 22:15]
FSTools.Mod:
(* returns if a file or directory exists. If yes, then fullname is set to filename *)
PROCEDURE Exists*(CONST name: ARRAY OF CHAR; VAR fullName: ARRAY OF CHAR; VAR flags: SET): BOOLEAN;

Денис Будяк, [25.08.19 22:17]
Спасибо! Но в 12-м году её ещё не было. Значит, выход пока в том, чтобы создавать руками или смотреть на красный экран.

Денис Будяк, [25.08.19 22:18]
А блин, она появилась в ноябре 12-го, а я - в октябре

Денис Будяк, [25.08.19 22:18]
Значит, надо попробовать переехать в ноябрь :)

Денис Будяк, [25.08.19 23:08]
Уф, вроде получилось. На децл улучшил работу TFXRef, но ничего существенного

Денис Будяк, [25.08.19 23:08]
https://gitlab.com/budden/jaos/commits/ ... %8F-TFXRef

Денис Будяк, [25.08.19 23:08]
Спасибо за помощь!

Денис Будяк, [25.08.19 23:10]
Теперь есть гораздо более серьёзный вопрос: есть парсер в Fox, а есть отдельный парсер TF... . Соответственно, логично переделать TFXRef, чтобы он пользовался парсером от Fox. Но я пока не смотрел, что это может означать. Например, TF... включает комментарии и переносы строк в лексемы, это очень правильно. Делает ли так Fox - я пока не знаю.

Денис Будяк, [25.08.19 23:10]
Вероятно, это будет уже не в ближайшие дни...

Денис Будяк, [27.08.19 19:50]
Немного поизучал зависимости в файлах TF*, чтобы понять, как проще переделать. Вот что обнаружилось:

Денис Будяк, [27.08.19 19:50]
* FoxScanner менялся около 60 раз
* TFXRef - 976 строк. Мало зависит от S=BimboScanner (4+50), сильно зависит от
TS=TFTypeSys (больше 100), от TFScopeTools - (15)
* TFTypeSys - абстрактное от языка синт. дерево - 1063 строки - ни от чего не зависит в данной компании! Пишет символьные файлы.
Используется в TFDocGenerator, TFCheck, TFAOParser, TFDumpTS, TFTypeSys
* TFScopeTools - 167 строк - используется в TFPET, TFCheck, TFModuleTrees, TFXRef
* BimboScanner - 545 строк
* TFAOParser - 1316 строк - зависит от TS=TFTypeSys (202), S=BimboScanner(276)

Денис Будяк, [27.08.19 19:51]
Модуль TFTypeSys хочется оставить, т.к. он центральный в этой инфраструктуре и от него всё зависит. Но TFAOParser тоже от него зависит. Если мы хотим выкинуть TFAOParser и оставить FoxParser, то возникает проблема: мы не можем менять FoxParser.

Денис Будяк, [27.08.19 19:59]
Т.е. похоже, что заменив TFAOParser на FoxParser, придётся и TFTypeSys заменить на FoxParserTree, причём объём работы получается немалым.

Денис Будяк, [27.08.19 20:00]
Знатоки, что скажете на тему целесообразности такого плана?

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним TFXRef

Сообщение БудДен » 28.09.19 11:29

Выяснилось, что FoxParser пропускает комментарии, вместо того, чтобы включать их в дерево. Это затруднительная ситуация, поскольку он менялся много раз и мы пока не знаем, какие версии нам интересны. Похоже, что нет иного выхода, кроме как поддерживать два парсера. Печально.

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним TFXRef

Сообщение БудДен » 29.09.19 14:47

TFPET - переход к определению по Ctrl-мышь. Но к импортированным модулям как-то не совсем переходит. Или вообще не.

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним продвинутый редактор для A2: TFPET/TFXRef

Сообщение БудДен » 29.09.19 16:22

Записал небольшое видео про TFPET.

https://youtu.be/-n19nX_-Umc

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним продвинутый редактор для A2: TFPET/TFXRef

Сообщение БудДен » 05.10.19 00:39

Немного почитал код PET и TFPET.
PET использует ModuleTrees, которая использует FoxScanner и ModuleParser.

FTPET использует TFModuleTrees, которая использует TFAOParser. Последний иногда падает по ассерту. Далее есть такой фрагмент кода:

Код: Выделить всё

			done := TRUE;
		(* Need to catch errors to release locks and let the editing continue*)
		FINALLY
Вероятно, что код недоотлажен, поэтому так. В этом месте, когда TFAOParser падает, появляется красный экран. ModuleParser, видимо, никогда не падает, поэтому и красного экрана не бывает. Например, функция Check там выставляет флаг ошибки, а HALT там был, но теперь он закомментирован.

Видимо, нужно поменять TFAOParser, чтобы он тоже не падал. Надо только, чтобы он к тому ещё умел не зависать.

И ещё я понял, что поскольку нет возможности сейчас менять код собственно ModuleParser, то наличие третьего отдельного парсера специально для FTPET является как раз удачным стечением обстоятельств - оно делает код независимым.

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним продвинутый редактор для A2: TFPET/TFXRef

Сообщение БудДен » 09.10.19 15:46

Сделал ещё микро-улучшение. Теперь TFPET не падает на TextUtilities.Mod. Раньше он не понимал type guards. Теперь он их тоже не понимает, но хотя бы пропускает.

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним продвинутый редактор для A2: TFPET/TFXRef

Сообщение БудДен » 10.10.19 19:13

Остановился в WITH - пока не понимаю, как делать. Там есть некий SCOPE, и, видимо, при обходе WITHStatement должен быть какой-то другой scope. Но когда генерируются эти scope? И, видимо, они должны как-то вписываться в WITHStatement.

БудДен
Сообщения: 436
Зарегистрирован: 07.10.18 14:01

Re: Чиним продвинутый редактор для A2: TFPET/TFXRef

Сообщение БудДен » 10.10.19 20:22

Перешло в вики
Последний раз редактировалось БудДен 16.10.19 16:45, всего редактировалось 1 раз.

Ответить