🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #92675

Re: Analiza kodu Pascala - Yacc?

#92675
From: darekm
Date: Fri, 17 Oct 2008 11:06
57 lines
3578 bytes
Borneq pisze:
> Chciałbym napisać analizator kodu Pascala w wersji Delphi/Kyliź jak i 
> Lazarusa który mógłby zanalizować całe projekty i pakiety, znajdować 
> drzewo użycia unitów jak i zbiór klas i metod używanych w tych unitach.
> Analizator potrzebny byłby głownie z powodu:
> Piszę sobie bibliotekę która miała by działać zarówno w Delphi/Kylixie 
> jak i w Lazarusie; są przypadki zaimportowania znanych pakietów jak 
> Synedit, jednak nie chciałbym rozwijać dwóch wersji które i tak w końcu 
> się rozminą. Potrzebny byłby konwerter który mógłby automatycznie 
> konwertować projekt w obie strony.

Z parserem Ci nie pomogę, natomiast kilka moich przemyśleń na temat 
przenośnego kodu.

> Do tego potrzebny jest parser - do konwersji Delphi<->Kylix wystarczało 
> {$ifdef LINUX} i {$ifdef VisualCLX} w kodzie oraz mały programik do 

samo LINUX nie wystarczy, gdyż przy FPC można kompilować zarówno dla Win 
jak i innych platform. Raczej koniecznych jest kilka innych definicji.

> konwersji który:
> - zmienia rozszerzeń dfm<->xfm w programach testowych
> - w plikach .dof tworzenie/usuwanie "Conditionals=VisualCLX" dla Delphi 
> z CLX
> - tworzenie .kof dla Kylixa
> - w plikach cfg dodawanie/usuwanie do opcji -D  " VisualCLX "

Jak najmniej tego typu uwarunkowań w plikach innych niż kod źródłowy. 
Przecież to wszystko można dodać przy pomocy małego pliku inkludowanego 
na początku każdego źródła.
Ja mam w pierwszej linii {$I start.inc}
i w nim ustawiane są wszystkie dyrektywy kompilacji w zależności od 
kompilatora i platformy

> - tworzenie .plików .conf Linuxa z "-DVisualCLX"
dodaj do includa
> - zmiany w plikach pas: tam gdzie było {$R *.dfm} zamiana na {$R *.xfm}
to też powinno być warunkowe {ifdef *.dfm  else *.xfm}

> W tym przypadku nie trzeba parsowania, ale jeśli mam nietyle zmieniać 
> składnię co określać jakich unitów z Vcl/jcl mam użyć, jest potrzebny 
> analizator.

tego nie rozumiem. Przecież kompilator sam Ci powie co potrzebuje.
Nie do końca sobie potrafię wyobrazić w czym parser mógłby pomóc. Jeżeli 
masz niewielką bibliotekę to się go nie opłaca robić. Jeżeli naprawdę 
dużą automat będzie za słaby.


Zobacz jak jest pisany FPC, to chyba najlepszy przykład pisania 
wieloplatformowego. Stosują kilka rozwiązań, parsery również, ale chyba 
nie do tego co sugerujesz.
Opieranie się o pliki konfiguracyjne środowisk wizualnych wydaje się 
niewłaściwe, ze względu na stosunkowo częste zmiany ich struktury

-- 
   Darek
Technical Details
Message-ID: <gd9rm3$j0s$1@atlantis.news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!news.intelink.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
References: <gd9o7o$k2r$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!nf1.ipartners.pl!ipartners.pl!news.nask.pl!news.nask.org.pl!news.internetia.pl!news.intelink.pl!newsfeed.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
From: darekm <darekm@emadar.com>
Newsgroups: pl.comp.lang.pascal
Subject: Re: Analiza kodu Pascala - Yacc?
Date: Fri, 17 Oct 2008 13:06:03 +0200
Organization: TP - http://www.tp.pl/
Lines: 58
Message-ID: <gd9rm3$j0s$1@atlantis.news.neostrada.pl>
References: <gd9o7o$k2r$1@news.onet.pl>
NNTP-Posting-Host: gsi122.internetdsl.tpnet.pl
Mime-Version: 1.0
X-Trace: atlantis.news.neostrada.pl 1224241667 19484 83.3.216.122 (17 Oct 2008 11:07:47 GMT)
X-Complaints-To: usenet@news.neostrada.pl
NNTP-Posting-Date: Fri, 17 Oct 2008 11:07:47 +0000 (UTC)
User-Agent: Thunderbird 2.0.0.17 (Windows/20080914)
In-Reply-To: <gd9o7o$k2r$1@news.onet.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit