Страница 1 из 1

Как устроено дерево разбора в PET

Добавлено: 28.09.19 11:31
БудДен
Обычный PET (не TFPet) довольно неплохо ориентируется в исходном коде. Соответственно, возникает вопрос: а нет ли вне TF* альтернативного парсера АО, который мог бы пригодиться для целей рефакторинга?

Re: Как устроено дерево разбора в PET

Добавлено: 28.09.19 11:43
БудДен
Чтение исходников PET.Mod

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

sidePanel -> genTree -> Configuration.XML -> PETModuleTree.GenModuleTree

но данная процедура тривиальна - она возвращает пустое дерево. 

Зато там есть PetModuleTree.ModuleTree в к-рой вызывается AddImportList, он вызывается только в 2 местах.
Посмотреть вокруг этих вызовов - там рядом интересное

Чтобы было ясно - в целом задача создать инструменты рефакторинга, прежде всего, "переименовать идентификатор".
Когда это будет сделано, можно будет начать переводить код на РЯ.

Re: Как устроено дерево разбора в PET

Добавлено: 28.09.19 16:47
БудДен
Модуль ModuleParser.Mod отвечает в PET за разбор модуля. Он заметно отличается от TFAOParser.Mod. Ну, наплодили!

Re: Как устроено дерево разбора в PET

Добавлено: 28.09.19 18:09
БудДен
ModuleParser изменялся около 70 раз :(
Итак, есть аж целых три парсера одного и того же Оберона, два из которых изменялись по 60 раз, а один безнадёжно отстал. Что-то мне это всё не нравится :(

Re: Как устроено дерево разбора в PET

Добавлено: 28.09.19 19:11
Павиа
Это нормально. У вон тоже свой компилятор пробовал начинать 13 раз. На 13 получилось.
А вот уж сколько изменений в парсере было и не упомнишь. Хотя там большинство изменений было добавления новых правил.

Re: Как устроено дерево разбора в PET

Добавлено: 28.09.19 21:17
БудДен
Вопрос не в том, что он менялся 60 раз - это нормально. Вопрос в том, что их таких три штуки разных в рамках одной системы. Для компиляции, для отображения структуры кода в редакторе и для построения таблицы определений.

Re: Как устроено дерево разбора в PET

Добавлено: 28.09.19 22:49
Павиа
Им нужны разные структуры и можно делать разные оптимизации.

Re: Как устроено дерево разбора в PET

Добавлено: 29.09.19 10:51
БудДен
Из соображений минимализма хватило бы и одного. Плохо то, что язык с годами меняется, описания нет, два парсера поддерживаются, третий не поддерживается. При этом в А2 появляются новые возможности, но старые при этом отваливаются. Т.е. даже непонятно пока, от какой точки надо ответвляться. Если бы не это, то неважно было бы, сколько парсеров. А так пока непонятно, за какую ниточку тянуть.

Re: Как устроено дерево разбора в PET

Добавлено: 29.09.19 11:09
Павиа
Берите тот что для компиляции он должен быть полным.
А тот что для отображения он не обязан быть полным, но там могут быть свои примочки, расширения и дополнения.