Как устроено дерево разбора в PET
Как устроено дерево разбора в PET
Обычный PET (не TFPet) довольно неплохо ориентируется в исходном коде. Соответственно, возникает вопрос: а нет ли вне TF* альтернативного парсера АО, который мог бы пригодиться для целей рефакторинга?
Re: Как устроено дерево разбора в PET
Чтение исходников PET.Mod
Зато там есть PetModuleTree.ModuleTree в к-рой вызывается AddImportList, он вызывается только в 2 местах.
Посмотреть вокруг этих вызовов - там рядом интересное
Чтобы было ясно - в целом задача создать инструменты рефакторинга, прежде всего, "переименовать идентификатор".
Когда это будет сделано, можно будет начать переводить код на РЯ.
Код: Выделить всё
sidePanel -> genTree -> Configuration.XML -> PETModuleTree.GenModuleTree
но данная процедура тривиальна - она возвращает пустое дерево.
Посмотреть вокруг этих вызовов - там рядом интересное
Чтобы было ясно - в целом задача создать инструменты рефакторинга, прежде всего, "переименовать идентификатор".
Когда это будет сделано, можно будет начать переводить код на РЯ.
Re: Как устроено дерево разбора в PET
Модуль ModuleParser.Mod отвечает в PET за разбор модуля. Он заметно отличается от TFAOParser.Mod. Ну, наплодили!
Re: Как устроено дерево разбора в PET
ModuleParser изменялся около 70 раз :(
Итак, есть аж целых три парсера одного и того же Оберона, два из которых изменялись по 60 раз, а один безнадёжно отстал. Что-то мне это всё не нравится :(
Итак, есть аж целых три парсера одного и того же Оберона, два из которых изменялись по 60 раз, а один безнадёжно отстал. Что-то мне это всё не нравится :(
Re: Как устроено дерево разбора в PET
Это нормально. У вон тоже свой компилятор пробовал начинать 13 раз. На 13 получилось.
А вот уж сколько изменений в парсере было и не упомнишь. Хотя там большинство изменений было добавления новых правил.
А вот уж сколько изменений в парсере было и не упомнишь. Хотя там большинство изменений было добавления новых правил.
Re: Как устроено дерево разбора в PET
Вопрос не в том, что он менялся 60 раз - это нормально. Вопрос в том, что их таких три штуки разных в рамках одной системы. Для компиляции, для отображения структуры кода в редакторе и для построения таблицы определений.
Re: Как устроено дерево разбора в PET
Им нужны разные структуры и можно делать разные оптимизации.
Re: Как устроено дерево разбора в PET
Из соображений минимализма хватило бы и одного. Плохо то, что язык с годами меняется, описания нет, два парсера поддерживаются, третий не поддерживается. При этом в А2 появляются новые возможности, но старые при этом отваливаются. Т.е. даже непонятно пока, от какой точки надо ответвляться. Если бы не это, то неважно было бы, сколько парсеров. А так пока непонятно, за какую ниточку тянуть.
Re: Как устроено дерево разбора в PET
Берите тот что для компиляции он должен быть полным.
А тот что для отображения он не обязан быть полным, но там могут быть свои примочки, расширения и дополнения.
А тот что для отображения он не обязан быть полным, но там могут быть свои примочки, расширения и дополнения.